使用 shift 在文档中查找带有 string/array 的元素

Find elements in a document with a string/array using 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

已编辑 fiddle 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);   
    }
});

试试看

不要使用 .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

首先,如果您在循环内通过 shift() 或其他任何与此相关的内容对其进行修改,则不应在 _array.length 上 运行。

现在,为什么它会在您进行此更改后提醒它提醒的内容:

var arrLength = _array.length;   
for (var i = 0; i < arrLength; i++) {

    if ($(_array.shift()).length) {
        alert(_array)
    }

}

_array.shift() 产生 ul.cl 时,第一个匹配将在 $(_array.shift()).length 上,并且在移位之后数组内容是 li,span.

这就是为什么第一个警报是 li,span

同样,下一个警报将是 span,因为它将找到一个 li

最后,警报是空的,因为在最后一次轮班后数组为空。

Fiddle

[0]:http://jsfiddle.net/67xs04f1/9/

有两个示例,如果一个一个地想要一个元素,如果你删除一个元素并想要特定的元素