0

我无权访问一些后端的东西,我没有任何帮助。这就是我需要做的,我需要 jquery 代码来找到第二类“文本”并将其和以下 li 放入新的 ul 中。

这个

<ul>
  <li class="text">TEXT</li>
<li class="subText">TEXT</li>
<li class="subText">TEXT</li>
<li class="subText">TEXT</li>
<li class="subText">TEXT</li>
<li class="text">TEXT</li>
<li class="subText">TEXT</li>
<li class="subText">TEXT</li>
<li class="subText">TEXT</li>
<li class="subText">TEXT</li>
</ul>

对此

<ul>
<li class="text">TEXT</li>
<li class="subText">TEXT</li>
<li class="subText">TEXT</li>
<li class="subText">TEXT</li>
<li class="subText">TEXT</li>
</ul>
<ul>
<li class="text">TEXT</li>
<li class="subText">TEXT</li>
<li class="subText">TEXT</li>
<li class="subText">TEXT</li>
<li class="subText">TEXT</li>
</ul>

我已经尝试了一堆代码,但无法让它工作,有什么建议吗?

4

7 回答 7

2

这应该这样做:

$('li.text:first').nextUntil('li.text').addBack().wrapAll('<ul>');
$('li.text:eq(1)').nextAll().addBack().wrapAll('<ul>');
$('li.text:first').closest('ul').unwrap();

jsFiddle 示例

将产生:

<ul>
    <li class="text">TEXT</li>
    <li class="subText">TEXT</li>
    <li class="subText">TEXT</li>
    <li class="subText">TEXT</li>
    <li class="subText">TEXT</li>
</ul>
<ul>
    <li class="text">TEXT</li>
    <li class="subText">TEXT</li>
    <li class="subText">TEXT</li>
    <li class="subText">TEXT</li>
    <li class="subText">TEXT</li>
</ul>
于 2013-06-27T16:11:42.177 回答
0

查看JQuery .wrap

// do some checks
    $(".someclass").wrap("<ul></ul>");
于 2013-06-27T16:10:14.813 回答
0

类似的东西会按照它们在 DOM 中出现的顺序$("ul li")返回所有列表项。然后,您可以遍历它们,一旦找到第二个,只需执行以下操作:

$("li").before("</ul><ul>")

编辑:对不起,before()不使用prepend()

于 2013-06-27T16:05:21.227 回答
0

我更喜欢使用最有效的方式来做到这一点:

首先,我将自定义类名(名为“first”)添加到类“text”的第一次出现。

<ul>
  <li class="text first">TEXT</li>
  <li class="subText">TEXT</li>
  <li class="subText">TEXT</li>
  <li class="subText">TEXT</li>
  <li class="subText">TEXT</li>
  <li class="text">TEXT</li>
  <li class="subText">TEXT</li>
  <li class="subText">TEXT</li>
  <li class="subText">TEXT</li>
  <li class="subText">TEXT</li>
</ul>

然后,使用 jQuery 函数查找字符串并将其替换为我们想要的字符串:

var myHTMLcontent = $("ul").html();

var newContent=myHTMLcontent.replace('<li class="text">','</ul><ul><li class="text">');

$("ul").html(newContent);

希望这可以帮助

于 2013-06-27T16:12:12.963 回答
0
$('ul .text').eq(1).prev().nextAll().appendTo($('<ul>').insertAfter('ul:first'));

演示--> http://jsfiddle.net/RhMj9/5/

于 2013-06-27T16:12:45.753 回答
0

如果您有超过 2 件ul事情要做,您可以使用以下代码:

$('li').unwrap()
$('.text').each(function(){
    $(this).nextUntil('.text').addBack().wrapAll('<ul>')
})

小提琴:http: //jsfiddle.net/HBXNk/

于 2013-06-27T16:19:49.320 回答
0

这个怎么样:

$('ul').find('li.text').unwrap().each(function () {
    $(this).nextUntil('.text').andSelf().wrapAll($('<ul/>'));
});

小提琴

有多少 li.text 以及您需要创建多少组并不重要,并且不会在链接的帮助下将元素展开和丢弃。

于 2013-06-27T16:24:19.390 回答