JQuery for循环遍历HTML字符串中的嵌入元素

时间:2012-11-14 15:32:37

标签: jquery html

我有一个存储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

4 个答案:

答案 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'))

我会选择通过分配类选择或属性选择并再次在“主”中查询。所以这基本上是一个递归函数,遍历初始选择的每个子节点,即使它很可能不会完全按照这种方式工作