在li标签内包装锚链接和文本节点(并且不包括ul标签)?

时间:2012-12-07 06:18:40

标签: jquery

我有这样的事情:

<li>
  <a></a>
  "(1)"
  <ul></ul>
</li>

我想让它结束这样的事情:

<li>
  <span>
    <a></a>
    "(1)"
  </span>
  <ul></ul>
</li>

如何做到这一点?

4 个答案:

答案 0 :(得分:1)

$ul = $('li ul');
$('li ul').remove();
$('li').wrapInner('<span>');
$('li').append($ul);

作品。请参阅http://jsfiddle.net/Lhg32/(感谢您的评论!)

答案 1 :(得分:1)

var content = $('li').clone(true),
         ul = content.children('ul').remove();

$('li').html($('<span />').append(content.contents()).append(ul));

FIDDLE

答案 2 :(得分:0)

http://jsfiddle.net/lamarant/XjQek/

<强> HTML

<ul>
    <li>This is Item 1
        <ul>
            <li>Item 1 Sub 1</li>
            <li>Item 1 Sub 2</li>
            <li>Item 1 Sub 3</li>
        </ul>
    </li>
    <li>This is Item 2
        <ul>
            <li>Item 2 Sub 1</li>
            <li>Item 2 Sub 2</li>
            <li>Item 2 Sub 3</li>
            <li>Item 2 Sub 4</li>
        </ul>
    </li>
</ul>

<强>的Javascript

$('ul li').not('ul ul li').each(function () {
        var $clone = $(this).clone(true);
        var $origUL = $('ul', $(this)).first();
        var $newUL = $('<ul></ul>');
        $newUL.html($origUL.html());
        $clone.children('ul').remove();
        $(this).html('').append($('<span>' + $clone.html().trim() + '</span>')).append($newUL);
    });

<强>结果

<ul>
    <li><span>This is Item 1</span>
        <ul>
            <li>Item 1 Sub 1</li>
            <li>Item 1 Sub 2</li>
            <li>Item 1 Sub 3</li>
        </ul>
    </li>
    <li><span>This is Item 2</span>
        <ul>
            <li>Item 2 Sub 1</li>
            <li>Item 2 Sub 2</li>
            <li>Item 2 Sub 3</li>
            <li>Item 2 Sub 4</li>
        </ul>
    </li>
</ul>

答案 3 :(得分:-3)

试试这个

$('li a').before('&lt;span&gt;');
$('li ul').before('&lt;/span&gt;');

希望这有帮助!