【问题标题】:jQuery .after() tries to "correct" the html I'm inserting. How do I stop this?jQuery .after() 试图“纠正”我插入的 html。我该如何阻止这个?
【发布时间】:2011-08-24 16:09:20
【问题描述】:

我正在尝试将一个长长的无序列表分解成更小的部分,如下所示:

$('.cList').each(function() {
    var thisList = $(this).find('li')
    var thisLen = thisList.length
    for(var x=0;x<thisLen;x++) {
        if((x % 5)==0&&x>0) {
            $(thisList).eq(x).after("</ul><ul>")    
        }    
    }
})

我最终得到的是这样的:

<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
<ul></ul> <---- I want the list to end and start, not make a nested list

而不是这个:

<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
</ul><ul>  <--- like this

就好像插入 &lt;/ul&gt;&lt;ul&gt; 不是有效的 HTML 并且 jQuery 以某种方式决定 &lt;ul&gt;&lt;/ul&gt; 是有效的。

见:http://jsfiddle.net/MGHt5/

【问题讨论】:

  • 当你让 jQuery 插入 HTML 时,它会从给定的 HTML 中创建一组 DOM 元素,然后插入这些 DOM 元素。因此,在您的示例中,&lt;/ul&gt; 是多余的。 &lt;ul&gt; 生成一个新列表,并将其插入到 DOM 中。因此,如果你想分解一个列表,你将不得不创建一个新列表,从旧列表中删除列表项,将它们添加到新列表中,然后在当前列表之后插入新列表.
  • 副本中的代码对我有用。

标签: javascript jquery html


【解决方案1】:

我不会特别担心打开和关闭标签,而是使用.wrapAll() 将&lt;ul&gt; 标签包裹在一个包含5 个&lt;li&gt;s 的jQuery 对象周围。您可以使用.slice() 从thisList 中获取&lt;li&gt;s 的块。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2016-06-23
  • 1970-01-01
  • 2018-09-11
  • 2023-01-09
  • 1970-01-01
  • 1970-01-01
  • 2021-09-11
  • 2022-12-07
相关资源
最近更新 更多