2012-01-04 67 views
1

预期结果:jquery append/prepend/wrapInner?

<li><a><span class="icon"></span><span class="text">Link Text</span></a></li>


开始HTML:

<li><a>Link Text</a></li> 

我已经尝试使用.prepend().append()并分别.wrapInner()但没有得到期望的输出。


$('li a').wrapInner("<span class='icon'></span><span class='text'></span>");

输出:

<li><a><span class="icon">Link Text</span></a></li>


$('li a').prepend("<span class='icon'></span><span class='text'>"); 
$('li a').append("</span>"); 

输出:

<li><a><span class="icon"></span><span class='text'></span>Link Text</a></li>

我已经设置了jsfiddle here。 有没有办法实现我想要的?

回答

5

检查我jsFiddle这里。我使用方法如下,

$('li a').wrapInner("<span class='text'></span>"); 

$('li a').prepend("<span class='icon'></span>"); 

如果你想在1号线,然后如下

$('li a').wrapInner("<span class='text'></span>").prepend("<span class='icon'></span>"); 

DEMO这里

+0

为什么地球上你的开启和关闭标签被颠倒了? '“”' – 2012-01-04 19:26:30

+0

这也可以,谢谢! 1行vers。代码比@Matt_H解决方案轻一点。 – 2012-01-04 19:26:34

+0

aww my bad with the tag reversal ..编辑它 – 2012-01-04 19:30:39

2

像这样的东西应该工作:

$('li a').html('<span class="icon"></span><span class="text">' + $('li a').html() + '</span>'); 
+0

谢谢,这工作!我认为'.html()'会起作用,但jQuery中没有足够的技巧来解决它。 – 2012-01-04 19:17:50

+0

如果这是正确答案,请勾选它。谢谢。 – 2012-01-04 19:20:44

+1

如果有多个“li a”元素,这将不起作用。这是一种真正不应该使用的破坏性方法。 – 2012-01-04 19:29:01

0

这似乎是工作好一点:)

var curText = $('li a').text(); 

$('li a').html("<span class='icon'></span><span class='text'>"+curText+"</span>"); 

http://jsfiddle.net/zqUmL/5/

0

有什么不妥这样使用?

text = $('li a').html(); 
$('li a').html("<span class='icon'></span><span class='text'>"+text+"</span>");