学习香草JavaScript,用于循环

学习香草JavaScript,用于循环,javascript,for-loop,innerhtml,createelement,Javascript,For Loop,Innerhtml,Createelement,我试图学习香草JavaScript或纯JS,不管你怎么看。我开始学习jQuery,现在我正在尝试在没有框架的情况下提高速度。我通常只用jQuery就可以做到这一点,但我很难用纯JS做到这一点 var a = $('.entry-content'),i; for (i=0;i<a.length; i++) { var b = a[i].innerHTML; var c = document.createElement('div'); var d = c.id = 'rep

我试图学习香草JavaScript或纯JS,不管你怎么看。我开始学习jQuery,现在我正在尝试在没有框架的情况下提高速度。我通常只用jQuery就可以做到这一点,但我很难用纯JS做到这一点

var a = $('.entry-content'),i;

for (i=0;i<a.length; i++) {
   var b = a[i].innerHTML;
   var c = document.createElement('div');
   var d = c.id = 'reply_bb';
   var e = d.innerHTML = 'Reply';
   a[i].innerHTML = a[i].appendChild(c);
 }
var a=$('.entry content'),i;

对于(i=0;i而言,此处开始出错:

var d = c.id = 'reply_bb';
var e = d.innerHTML = 'Reply';
d
此时是字符串
'reply\u bb'

因此
d
没有属性
。innerHTML


那么,我不知道你想用这个做什么:

a[i].innerHTML = a[i].appendChild(c);
您可以设置
innerHTML
或追加子元素。尝试将
innerHTML
设置为追加子元素(即追加的DOM元素)的结果是没有意义的


在我看来,也许你想要的是:

var items = $('.entry-content'), replyDiv;

for (var i = 0; i < items.length; i++) {
   replyDiv = document.createElement('div');
   replyDiv.className = 'replyButton';
   replyDiv.innerHTML = 'Reply';
   items[i].appendChild(replyDiv);
}
这两种方法都适用于安装事件处理程序时存在的项目。我在这里使用
。单击()
,只是因为它更简洁

但是,如果要在其上安装事件处理程序的项目尚不存在或将来将创建,则必须使用委派事件处理程序,即在已存在的父级上安装事件处理程序,而不能使用
。单击()
,因此将使用
.on()
,如下所示:

$(static parent selector).on('click', '.replyButton', function() {
    // event handler code here
})'

其他一些建议:

  • 使用有意义的变量名,如
    replyDiv
    ,而不是
    a
    b
    c
    d
  • 不需要时不要创建中间变量
  • id值必须是唯一的,所以要么生成唯一的id名称,要么使用类名(我的代码切换为类名)

  • 阅读appendChild所做的。添加了关于问题另一部分的信息:
    .on()
    vs.
    。单击()
    。非常感谢您对自己的解释,并且能够非常友好和理解!我实际上理解了这一切,很抱歉变量是b c d,我这样做是为了开始,然后命名它们。我不知道这只是一个习惯:)您肯定收到了投票并为您检查@我问了另一个问题。如果你能看一看,这可能是另一个简单的答案;)
    var items = $('.entry-content'), replyDiv;
    
    for (var i = 0; i < items.length; i++) {
       replyDiv = document.createElement('div');
       replyDiv.className = 'replyButton';
       replyDiv.innerHTML = 'Reply';
       items[i].appendChild(replyDiv);
    }
    
    var items = document.getElementsByClassName('entry-content'), replyDiv;
    
    for (var i = 0; i < items.length; i++) {
       replyDiv = document.createElement('div');
       replyDiv.className = 'replyButton';
       replyDiv.innerHTML = 'Reply';
       items[i].appendChild(replyDiv);
    }
    
    $(item selector).click(fn) 
    $(item selector).on('click', fn)
    
    $(static parent selector).on('click', '.replyButton', function() {
        // event handler code here
    })'