编程语言
首页 > 编程语言> > javascript – 在元素列表中,将编号的索引放在ids中或使用索引选择器?

javascript – 在元素列表中,将编号的索引放在ids中或使用索引选择器?

作者:互联网

在创建有序的元素列表时,我可以考虑通过索引访问一个元素的三种合理方法:

给它一个唯一的id,最后带一个数字并使用字符串操作:

<ol>
 <li id="item-0"></li>
 <li id="item-1"></li>
 <li id="item-2"></li>
</ol>

...

for(var i = 0; i < 3; i++) {
   $('#item-' + i).doWhatever();
}

给他们相同的类并使用eq选择器:

<ol>
 <li class="item"></li>
 <li class="item"></li>
 <li class="item"></li>
</ol>

...

for(var i = 0; i < 3; i++) {
   $('.item').eq(i).doWhatever();
}

或者给他们相同的类并使用第n个子选择器:

<ol>
 <li class="item"></li>
 <li class="item"></li>
 <li class="item"></li>
</ol>

...

for(var i = 1; i <= 3; i++) {
   $('.item:nth-child(' + i + ')').doWhatever();
}

各有哪些优缺点?还有其他更好的方法吗?

解决方法:

我在你的性能测试中添加了第四个测试用例:http://jsperf.com/item1-vs-item-eq-1/2

按顺序考虑您的要点:

>速度它很容易成为最快的方法
>字符串操作无
>索引从0开始
>样式您可以根据父样式设置样式,也可以选择将其他类添加到列表项本身
>可移植性可以通过getElementById和childNodes轻松实现

我认为,要考虑的主要问题是,当您在列表中进行迭代时,所有方法都涉及重复查询DOM.如果您只访问单个元素,那不是什么大问题,但是如果您要在整个列表中工作,那么只进行一次查询就会在性能方面产生很大的影响.

编辑出于好奇,我updated my case again根本不使用jQuery来查找列表,而只是使用我上面提到的准系统DOM API.
即使Sandor在指出我的愚蠢错误后做出的改变,也会产生明显的性能影响.考虑到这一点,我会说它主要归结为您的特定用例,以及您如何权衡速度与定位列表项目的多功能性.

标签:html,javascript,jquery,css-selectors,jquery-selectors
来源: https://codeday.me/bug/20190901/1783447.html