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

Find elements in a document with a string/array using shift

本文关键字:文档 查找 元素 数组 shift 字符串 使用      更新时间:2023-12-04

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

JsFiddle 的例子

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

最后,警报是空的,

因为在最后一个班次之后,数组是空的。

见小提琴。

编辑小

提琴 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);   
    }
});

试试看

[0]:http://jsfiddle.net/67xs04f1/9/
如果想要一个一个元素,

并且如果您删除一个元素并想要特定元素,则有两个示例