我有一个包含HTML的文档:
<ul class="cl">
<li> <span>span</span>
</li>
</ul>
我还有一个表示某些元素的CSS路径的字符串:
var _string = 'div p ul.cl li span';
我想找到基于文档的匹配路径,所以:
ul.cl li span
所以我想用shift()
一次切断一个字符串,然后尝试在文档中找到它。如果找到匹配,我会发出警告:
for (var i = 0; i < _array.length; i++) {
if ($(_array.shift()).length) {
alert(_array)
}
}
此警告li,span
但页面上还有ul.cl
为什么不提醒ul.cl,li,span
?我做错了什么?
答案 0 :(得分:1)
编辑小提琴http://jsfiddle.net/67xs04f1/6/
var _string = 'div p ul.cl li span';
var _array = _string.split(' ');
$.each(_array, function (i, item) {
if ($(item).length) {
alert(item);
}
});
试试
答案 1 :(得分:1)
不要使用.shift。它会改变数组,使你的for循环做出意想不到的事情。使用数组索引来获取如下所示的元素。
var _string = 'div p ul.cl li span';
var _array = _string.split(' ');
for (var i = 0; i < _array.length; i++) {
var el = _array[i]
if ($(el).length) {
alert(el)
}
}
更新了JS-Fidlle
答案 2 :(得分:1)
首先,如果你在_array.length
循环内修改它,或者其他任何事情,你就不应该在shift()
上运行。
现在,为什么它会在您进行此更改后发出警报的警报:
var arrLength = _array.length;
for (var i = 0; i < arrLength; i++) {
if ($(_array.shift()).length) {
alert(_array)
}
}
当$(_array.shift()).length
生成ul.cl时,第一个匹配将在_array.shift()
上,而在移位后,数组内容为li,span
。
这就是为什么第一个提醒是li,span
。
同样,下一个提醒将是span
,因为它会找到li
。
最后,警报是空的,因为在最后一次移位后数组为空。
请参阅Fiddle。
答案 3 :(得分:0)
[0]:http://jsfiddle.net/67xs04f1/9/
如果想要逐个元素,并且如果你删除一个元素并且想要一些元素,那么有两个样本