想象一下这种情况:
<span>Item 1</span> | <span>Item 2</span>
我如何定位|并删除它?另外,假设我总是需要删除|在span
之前带有“第2项”,并且列表可以随着在“第2项”之后或之前添加的项目而增长。所有新项目都将包含在span
中,并且它们将由|。
答案 0 :(得分:3)
$('span').each(function() {
if ($(this).text() == 'Item 2') {
$(this.previousSibling).remove();
}
});
答案 1 :(得分:2)
操纵文本节点是jquery并不完全擅长的事情之一。顺便说一句,本机浏览器API做得非常好。即使你不想经常使用它,这次你可能应该这样做。 previousSibling
选择上一个节点,无论是文本节点,注释节点还是元素节点。假设它始终是您要删除的文本节点,可能是安全的:
var $elem = $(":contains('Item 2')");
$elem.map(function(){ //select the preceding node to any element we want to remove
return this.previousSibling
}).addBack() // select the original element node as well
.remove(); // remove both
请注意,jQuery 1.8中添加了addBack
。如果您使用的是旧版本,请改用andSelf
。如果您只想删除 文本节点,请完全删除addBack
。
答案 2 :(得分:0)
已更新
这里有一些直接的javascript会删除代码中的所有“|”
var parent = $('span').parent().get(0), children = parent.childNodes, node;
for (node = 0;node < children.length;node++){
if (children[node].data === " | "){
parent.removeChild(children[node]);
}
}
答案 3 :(得分:0)
.contents
找到文本节点。
$("#container").contents().each(function () {
//Text node
if (this.nodeType === 3) {
$(this).remove();
}
});
答案 4 :(得分:0)
找到span
的父级,并使用.html()
和.replace()
。
JAVASCRIPT:
$('span:first-child').parent().html($('span:first-child').parent().html().replace(/\|/g, ''))
答案 5 :(得分:0)
抓住spans
。删除一切。将跨度放回(.join
,如您所愿。)
<div class='container'>
<span>Item 1</span> | <span>Item 2</span>
</div>
var $c = $(".container");
var $spans = $c.find("span");
var htmlSpans = [];
$spans.each(function(){
htmlSpans.push($(this).prop("outerHTML"));
});
$c.empty();
$c.append(htmlSpans.join(" "));
编辑: 使用相同逻辑来处理这个非常具体的案例的脏黑客。正则表达式替换在管道之前和之后处理0个或更多空格。
var $c = $(".container");
var html = $c.prop("outerHTML");
$c.empty();
$c.append(html.replace(/\s*\|\s*<span>Item 2/,"<span>Item 2" ));