【问题标题】:Using a loop to simplify DOM manipulation Vanilla JS使用循环来简化 DOM 操作 Vanilla JS
【发布时间】:2016-07-28 19:33:34
【问题描述】:

我有以下 JS 代码,我在其中尝试将这些元素附加到 DOM。我已经这样做了,但是我试图弄清楚如何使用循环来附加这些以遵循 DRY 原则。我只能用香草JS。

var divOne = document.getElementById('buttonHolder');

var btnGroupOne = document.createElement('div')
btnGroupOne.className = 'btn-group';
divOne.appendChild(btnGroupOne);

var btnOne = document.createElement('button');
var textOne = document.createTextNode('1');
btnOne.appendChild(textOne);
btnOne.className = 'btn btn-default';
btnGroupOne.appendChild(btnOne);

var btnTwo = document.createElement('button');
var textTwo = document.createTextNode('2');
btnTwo.appendChild(textTwo);
btnTwo.className = 'btn btn-default';
btnGroupOne.appendChild(btnTwo);

var btnThree = document.createElement('button');
var textThree = document.createTextNode('3');
btnThree.appendChild(textThree);
btnThree.className = 'btn btn-default';
btnGroupOne.appendChild(btnThree);

var btnFour = document.createElement('button');
var textFour = document.createTextNode('4');
btnFour.appendChild(textFour);
btnFour.className = 'btn btn-default';
btnGroupOne.appendChild(btnFour);
<div id="buttonHolder"></div>

【问题讨论】:

  • 您能否展示您尝试编写的代码以避免重复代码并解释哪些不起作用?
  • for-loop 怎么样?
  • 你真的不需要循环。使用您拥有的代码创建一个名为 createDefaultBtn 的函数,该代码接受文本节点值并返回一个新的默认按钮元素,您可以将其添加到父元素中。

标签: javascript loops dry dom-manipulation


【解决方案1】:

尽量抽象出尽可能多的代码,Andy 是对的,一个函数最适合这类任务:

function buttonMaker(textnode) {
  var btnOne = document.createElement('button');
  var textOne = document.createTextNode(textnode);
  btnOne.appendChild(textOne);
  btnOne.className = 'btn btn-default';
  return btnOne;
}

var numberOfButtons = 4;

var btnHolder = document.createElement('div');

// in a loop you can then do this:
for (var i = 1; i <= numberOfButtons; i++) {
  btnHolder.appendChild(buttonMaker(i));
}

document.getElementById('btnBox').appendChild(btnHolder);
&lt;div id="btnBox"&gt;&lt;/div&gt;

【讨论】:

  • 我建议使用 docfrag 否则每次添加新按钮时都会点击 DOM。
  • 请原谅我的编辑。我不喜欢 OP 要求 SO 做他的作业,但如果其他人稍后遇到这个答案,我希望代码开箱即用。
  • @ConspicuousCompiler 感谢您的帮助,我并没有试图让自己看起来没有做任何工作。这只是我的大部分代码的一小部分。我已经完成了,但建议我尝试实现循环以减少重复代码。我一直在寻找解决方案,但我并不真正了解如何将 for 循环与 DOM 操作一起使用。这是我第一次使用它。
猜你喜欢
  • 2017-07-09
  • 2023-03-28
  • 2020-08-08
  • 1970-01-01
  • 2021-05-22
  • 1970-01-01
  • 2019-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多