2012-11-14 92 views
2

我有一个基本的字符串变量来存储HTML内容。JQuery for循环嵌入HTML元素中的元素

字符串中的HTML是一种复杂的列表如下所示:

<ul> 
<li>One 
    <ul> 
    <li>a</li> 
    <li>b</li> 
    <li>c</li> 
    </ul> 
</li> 
<li>Two 
    <ul> 
    <li>d</li> 
    <li>e</li> 
    <li>f 
     <ul> 
     <li>g</li> 
     <li>h</li> 
     <li>i</li> 
     </ul> 
    </li> 
    </ul> 
</li> 
<li>Three</li> 

上面是一个简化的例子,但你可以看到,是列表中的元素的未知数量。列表元素可以包含另一个列表。有水平的未知数量(列表元素可以有不明(可能是最大9)父母<ul>

现在,当我把这个字符串转换成HTML我做了以下内容:

var obj = $(myHTMLString); 

然而,这只返回列表元素的第一级 - 因此,在下面的for循环中,只搜索第一级。我知道如何搜索子元素(在代码的else部分),但我需要为所有人列表的级别 - 未知。

for (var i=0; i<obj.length;i++) { 
    if (obj[i].id == someOtherVariable) { 
     //we have found it 
    } 
} 

有没有办法搜索我的html变量(obj)所有列表元素?

我想补充的是,当我console.log($(myHTMLString));它看起来像这样:

screenshot

回答

3

是:

var lis = $(myHTMLString).find("li"); 

遍历它们:

lis.each(function(index, li){ 
    //do your thing. i is the index in the array, li is the li element 
}) 
0

您可以在列表中的所有li

var liElements= $(myHTMLString).find('li'); 
1

只要使用HTML字符串作为上下文,就可以像平常一样使用选择器。试试这个:

$('li', $(myHTMLString)).each(function() { 
    // do something with the li 
}); 
0

以及它不仅li元素我想我会通过分配类选择走子节点

function searchli(object){ 
for each element in $(this).children() 
{ 
if $(this) is li 
{ 
add to selection; 
} 
call searchli($('this')); 
} 
next element; 
return selection; 
}; 

call searchli($('#list')) 

我会选择或属性选择,并在“主查询此“再次。所以这基本上是一个递归函数,它遍历初始选择的每个子节点,尽管它很可能不会以这种方式工作