2013-04-21 63 views
1

地方,我有一個這樣的名單:哪裏來的所有()選擇具有可變

<ul> 
    <li id="foo">foo</li> 
    <li id="bar">bar</li> 
    <li id="baz">baz 
     <div>more Text</div> 
    </li> 
</ul> 

我想刪除所有文字,除了最後一個列表,它是一個零索引爲2。因爲零索引是一個變量,我把這個變量的跨度內是這樣的:

<span>2</span> 

jQuery中的變量:

var qw = $('li:eq(' + $("span").text() + ')'); 

最後的刪除功能:

$('body *').not(qw).contents().filter(function() { 
    return this.nodeType == 3; 
}).remove(); 

問題是,列表中的div也被刪除,但我真的很想保留它。我玩('*')選擇器,但我似乎無法把它放在正確的地方。例如這不起作用:

var qw = $('li:eq(' + $("span").text() + ')' + '*'); 

Example at JsFiddle

+1

我不確定你在說什麼'all()'。如果你正在談論的是通用選擇器「*」的「全部選擇器」。在jQuery中沒有這樣的叫做all()的函數。 – BoltClock 2013-04-21 09:38:42

+0

@ BoltClock你在說什麼?我是否說過它是一個函數?我專門寫了「all()選擇器」 – Youss 2013-04-21 09:42:08

+3

all(),因爲它寫在你的問題中是功能符號。如果你混淆了術語「功能」和「選擇器」,我告訴你,沒有這樣的功能*。如果你正在討論一個*選擇器*,那麼不存在這樣一個名爲all()(或':all()')的選擇器,但是有'*'來選擇所有的元素。 – BoltClock 2013-04-21 09:43:12

回答

1

既然你已經qw已選定(緩存),並要刪除利用該緩存的元素中的文本節點,試試這個

$('body *').not(qw).not($('*', qw)).contents().filter(function() { 
    return this.nodeType == 3; 
}).remove(); 

它會過濾出的qw

0

後裔任何元素本應該做的伎倆

var allButLast = $("li").not(":last"); 

參考文獻:

注意你也可以這樣做:

var allButLast = $("li:not(:last)"); 

參考:

更新:

根據你的評論,你也可以這樣做:

var qw = $('li:not(:eq(' + $("span").text() + '))'); 

http://gurustop.net

+0

我不能用這種方式引用這個列表,我只能用我在 – Youss 2013-04-21 09:47:11

+0

裏放的索引號來引用它。所以這就是'$(「li:not(index number 2)」);' – Youss 2013-04-21 09:48:24

+0

幾乎是的,看到更新的答案 – Meligy 2013-04-21 09:49:49

1

這應該工作:

HTML

<span id="indexToKeep">2</span> 

<ul> 
    <li id="foo">foo</li> 
    <li id="bar">bar</li> 
    <li id="baz">baz 
     <div>more Text</div> 
    </li> 
</ul> 

的JavaScript

$("li:not(:eq(" + $("#indexToKeep").text() + "))", "ul").remove(); 

JSFiddle

+0

你可以給我一個包含'body *'的例子嗎? – Youss 2013-04-21 09:55:27