繁体   English   中英

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

[英]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 我究竟做错了什么?

JsFiddle的示例

编辑小提琴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

最后,警报是一个空警报,因为最后一次移位后该数组为空。

参见小提琴

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

如果想要一个元素一个,并且如果您删除一个元素并想要垂直元素,则有两个样本

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM