2011-12-07 47 views
1

包木窗跨度我有這樣的情況:身邊每一位家長文本

<ul> 
    <li> 
     <a href="#">Link 1</a> 
     <ul> 
      <li><a href="">Sub link</a></li> 
     </ul> 
    </li> 
    <li> 
     <a href="">Link 2</a> 
     <ul> 
      <li><a href="">Sub link</a></li> 
     </ul> 
    </li> 
</ul> 

,我需要環繞過文本span標記,如果它有子元素。因此,這firtst裏需要看起來像

<li><a href="#"><span>Link 1</span></a> 

它需要去無限它部門:

<ul> 
    <li> 
    <ul> 
     <li> 
     <ul n> 
      <li n> 

我甚至不用知道如何解決這個問題。我累了這樣的東西:

$('li').parent().wrapInner('<span />'); 

但它不是它。

我將不勝感激任何幫助。

TNX,

+0

我很困惑。 「你是什麼意思?」如果它包含子元素,那麼它就是「圍繞文本」*。這對我來說沒有意義。 – RightSaidFred

+0

如果'li'有一個孩子'ul'在'span'中包裹'a'(或者'a'的文本)?你可以發佈你想要修改的DOM看起來像操作後的代碼嗎? –

回答

1

試試這個:

$("li:has(ul) > a").wrapInner("<span />") 

選擇有一個孩子列表中的每個列表元素的錨標記和包裹它的內容在span標記。

http://jsfiddle.net/Tentonaxe/EKjfT/

編輯:響應jsperf(碧玉),試試這個:http://jsperf.com/jquery-has-vs/3

$("li").has("ul").children("a").wrapInner("<span />"); 

感謝指出了這一點碧玉。在選擇器中不使用選擇器方法通常會更快,而是使用實際方法,例如.has代替:has或.eq而不是:eq

編輯:但並非總是... http://jsperf.com/recursive-text-wrap似乎有利於我的第一個