Ну, хотя ваш существующий код не является неправильным, большая часть кода в цикле for не нужна и может быть сокращена до:
var btnSpan = document.createElement("span");
btnSpan.classList.add('quickLink'); // Add class to all quickLinks
btnSpan.innerHTML = '📋'; // Moved this out from loop
var tipSpan = document.createElement("span");
tipSpan.classList.add('tooltip'); // Add class to all tooltips
tipSpan.innerText = 'Copy ShipID'; // Moved this out from loop
for (var i = 0; i < shipCell.length; i++){
shipCell[i].appendChild(btnSpan.cloneNode(true)); //add button to each cell
shipCell[i].appendChild(tipSpan.cloneNode(true)); //add tool tip to each cell");
};
Потому что с помощью .cloneNode(true)
,вы также клонируете все его дочерние узлы внутри.Это означает, что вам не нужно постоянно присваивать .innerHTML
и .innerText
, потому что с помощью true
в .cloneNode()
они также будут клонированы.
Вам нужно будет только переназначить их, если вы используете.cloneNode()
, без аргумента true
.Однако в этом случае ваш существующий код потребует незначительной настройки.
var btnSpan = document.createElement("span");
btnSpan.classList.add('quickLink'); // Add class to all quickLinks
var tipSpan = document.createElement("span");
tipSpan.classList.add('tooltip'); // Add class to all tooltips
var btnSpanClone,
tipSpanClone;
for (var i = 0; i < shipCell.length; i++){
btnSpanClone = btnSpan.cloneNode(); // New btnSpan element without childNodes
tipSpanClone = tipSpan.cloneNode(); // New tipSpan element without childNodes
btnSpanClone.innerHTML = '📋';
tipSpanClone.innerText = 'Copy ShipID';
shipCell[i].appendChild(btnSpanClone);
shipCell[i].appendChild(tipSpanClone);
};
Что касается вашего вопроса о том, разумнее ли использовать .createTextNode()
, то в данном конкретном случае это не имеет значения, поскольку к вашим btnSpan
и tipSpan
больше нечего добавить.Если есть, то МОЖЕТ быть лучше использовать его для лучшей организации кода и читабельности.
Самое главное, чтобы ваш код был понятен любому.
Так что если вы думаете, используя.createTextNode()
может сделать код более читабельным и понятным, а затем использовать его.Если нет, то не надо.
Если вы говорите о производительности кода здесь, вы можете сравнить обе реализации самостоятельно, используя jsPerf или некоторые другие инструменты тестирования JS.Скорее всего, разница в производительности будет очень мала и может быть проигнорирована.