我有一个存储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) );
看起来像这样:
答案 0 :(得分: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
})
答案 1 :(得分:1)
您可以像往常一样使用选择器,只需使用HTML字符串作为上下文。试试这个:
$('li', $(myHTMLString)).each(function() {
// do something with the li
});
答案 2 :(得分:0)
您可以在列表中找到所有li
:
var liElements= $(myHTMLString).find('li');
答案 3 :(得分: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'))
我会选择通过分配类选择或属性选择并再次在“主”中查询。所以这基本上是一个递归函数,遍历初始选择的每个子节点,即使它很可能不会完全按照这种方式工作