使用shift在字符串/数组中查找文档中的元素

时间:2015-02-17 10:00:42

标签: javascript jquery arrays string shift

我有一个包含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?我做错了什么?

Example at JsFiddle

4 个答案:

答案 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/

如果想要逐个元素,并且如果你删除一个元素并且想要一些元素,那么有两个样本