学习 Vanilla JavaScript,for 循环

Posted

技术标签:

【中文标题】学习 Vanilla JavaScript,for 循环【英文标题】:Learning Vanilla JavaScript, for loop 【发布时间】:2013-02-27 10:30:15 【问题描述】:

我正在尝试学习 Vanilla 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 元素。

   <div class="entry-content">
     <div>
         Words from a poster or whatever would be in side here
     </div>
   </div>

在javascript之后=

   <div class="entry-content">
     <div>
         Words from a poster or whatever would be in side here
     </div>
      <div id="reply_bb">Reply</div>
   </div>

也因为这是相关的。当动态创建一个元素时,我会使用.click.on('click',function() 还是我会怎么做?我想要它,所以当用户单击reply_bb 时,它会附加另一个已经在刚刚隐藏的页面上的元素。

【问题讨论】:

阅读 appendChild 的作用。 【参考方案1】:

这里开始出错了:

var d = c.id = 'reply_bb';
var e = d.innerHTML = 'Reply';

此时d是字符串'reply_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);


而且,如果你真的想在没有 jQuery 的情况下这样做,你可以这样做:

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);


在回答您关于 .on().click() 的问题时,这取决于。这两个是等价的:

$(item selector).click(fn) 
$(item selector).on('click', fn)

两者都可以在您安装事件处理程序时存在的项目上正常工作。我在这里使用.click() 只是因为它更简洁。

但是,如果您想要事件处理程序的项目尚不存在或将在将来创建,那么您必须使用委托事件处理,您将事件处理程序安装在已经存在的父项上,您不能使用.click() 执行此操作,这样您就可以像这样使用.on()

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

其他一些建议:

    使用有意义的变量名,例如 replyDivitems,而不是 abcd。 不要在不需要的时候创建中间变量。 id 值必须是唯一的,因此要么生成唯一的 id 名称,要么改用类名(我的代码已切换为类名)。

【讨论】:

添加了有关问题另一部分的信息:.on().click() 非常感谢您解释自己并且能够非常友善和理解!我实际上理解了这一切,很抱歉变量是 a b c d 我这样做是为了开始然后命名它们。我不知道这只是一种习惯 :) 你肯定会收到支持并为你检查! @jfriend00 我在这里问了另一个问题。 ***.com/questions/15353028/… 如果你可以看一下,这可能是另一个简单的答案;)

以上是关于学习 Vanilla JavaScript,for 循环的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Vanilla JavaScript/Ajax 获取地理位置 - 国家和城市

javascript 使用vanilla JavaScript爬上DOM树

javascript 我的vanilla JavaScript插件的入门模板。

javascript 使用Vanilla JavaScript Shopify GraphQL Storefront API

javascript 使用Vanilla JavaScript Shopify GraphQL Storefront API

javascript AJAX与Vanilla JS