Можно ли передать аргументы функции в строку? - PullRequest
0 голосов
/ 15 июня 2019

Я создаю таблицу калькулятора с помощью JavaScript и пишу document.getElementById('x').innerHTML все время. Могу ли я написать функцию для замены этого кода? Например:

function select (a) {
  return document.getElementById(${a}).innerHTML;
}

Проблема, которую я вижу, заключается в том, что если я использовал литералы шаблона в getElementById, я не могу добавить кавычки, необходимые для определения строки как строки.

Чтобы вернуть это в контекст, у меня в таблице много ячеек с разными идентификаторами. Чтобы js мог обновлять каждую ячейку, мне приходилось многократно писать: document.getElementById('x').innerHTML. Это заставило меня задуматься, могу ли я написать небольшую функцию, которая позволит мне пропустить этот дополнительный ввод? Может ли функция взять аргумент и вернуть его с кавычками?

Ответы [ 2 ]

3 голосов
/ 15 июня 2019

Просто

var select = function(a) {
  return document.getElementById(a).innerHTML;
}
var ham = select('thing');

достаточно хорошо. Система уже знает, что там есть строка, потому что это тип, когда вы вызываете функцию select().


Если вы пытаетесь сократить ввод текста при присвоении значения innerHTML, вы должны сделать это и в теле функции. Зачем? Потому что, как только вы возвращаете строковое свойство innerHTML из функции, оно становится неизменным, подобно высказыванию 'a' = 'b'.

Вот как может выглядеть эта функция присваивания:

var assign = function( target, value) {
    document.getElementById(target).innerHTML = value;
}
assign('capitalGain', '$' + currency(initialGain));
0 голосов
/ 15 июня 2019

Вам не нужны литералы шаблона для такой простой задачи:

function select(a) {
    return document.getElementById(a).innerHTML;
}

Или, если вам необходимо:

function select(a) {
    return document.getElementById(`${a}`).innerHTML;
}

И теперь Chrome поддерживает синтаксис, подобный jQuery, - такв новых версиях Chrome это также будет работать.

function select(a) {
    return $(`#${a}`)[0].innerHTML;
}

Или более многословная и понятная версия:

function select(a) {
    let str = "#" + a;
    let [elem] = $(str);
    return elem.innerHTML;
}

И еще одна - в отличие от многословной, этаэто совершенно нечитаемая и плохая практика.

const select = a => ([{ innerHTML: b }] = $(`#${a}`), b);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...