我有一个这样的清单:
<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() + ')' + '*');
答案 0 :(得分:1)
鉴于您已qw
已选择(缓存),并且您想要使用此缓存元素删除文本节点,请尝试使用
$('body *').not(qw).not($('*', qw)).contents().filter(function () {
return this.nodeType == 3;
}).remove();
它过滤掉qw
答案 1 :(得分: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();
答案 2 :(得分:0)
这应该可以解决问题
var allButLast = $("li").not(":last");
参考文献:
请注意,您也可以这样做:
var allButLast = $("li:not(:last)");
参考:
<强>更新强>
根据您的评论,您也可以这样做:
var qw = $('li:not(:eq(' + $("span").text() + '))');