想象一下这个场景:
<span>Item 1</span> | <span>Item 2</span>
如何定位 | 并删除它?另外,假设我总是需要删除 | 在其中span
包含“第 2 项”之前,列表可以随着在“第 2 项”之前或之后添加的项目而增长。所有新项目都将包含在span
其中,并用 | 分隔。
想象一下这个场景:
<span>Item 1</span> | <span>Item 2</span>
如何定位 | 并删除它?另外,假设我总是需要删除 | 在其中span
包含“第 2 项”之前,列表可以随着在“第 2 项”之前或之后添加的项目而增长。所有新项目都将包含在span
其中,并用 | 分隔。
$('span').each(function() {
if ($(this).text() == 'Item 2') {
$(this.previousSibling).remove();
}
});
操作文本节点是 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
请注意,这addBack
是在 jQuery 1.8 中添加的。如果您使用的是旧版本,请andSelf
改用。如果您只想删除文本节点,请addBack
完全删除。
更新
这是一些直接的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]);
}
}
小提琴:http: //jsfiddle.net/vg3pc/
.contents
查找文本节点。
$("#container").contents().each(function () {
//Text node
if (this.nodeType === 3) {
$(this).remove();
}
});
span
找到s的父级并与.html()
一起使用.replace()
。
JAVASCRIPT:
$('span:first-child').parent().html($('span:first-child').parent().html().replace(/\|/g, ''))
演示:http: //jsfiddle.net/dirtyd77/5F3kf/2/
抢spans
。删除所有内容。放回跨度(.join
ed 随您选择)。
<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" ));