2

我有一个存储 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) );看起来像这样时,我想补充一点:

截屏

4

4 回答 4

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
})
于 2012-11-14T15:34:53.850 回答
1

您可以像往常一样使用选择器,只需将 HTML 字符串用作上下文。尝试这个:

$('li', $(myHTMLString)).each(function() {
    // do something with the li
});
于 2012-11-14T15:36:23.577 回答
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'))

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

于 2012-11-14T15:44:20.893 回答
0

li您可以在列表中找到所有内容:

var liElements= $(myHTMLString).find('li');
于 2012-11-14T15:34:45.150 回答