想象一下这种情景:
<span>Item 1</span> | <span>Item 2</span>
我该如何定位并删除 | 符号?并且,假设我总是需要在带有“Item 2”的
span
前删除 |,列表可以通过在“Item 2”之前或之后添加项目来增长。所有新项目都将被包含在 span
中,并且它们将用 | 分隔。想象一下这种情景:
<span>Item 1</span> | <span>Item 2</span>
span
前删除 |,列表可以通过在“Item 2”之前或之后添加项目来增长。所有新项目都将被包含在 span
中,并且它们将用 | 分隔。$('span').each(function() {
if ($(this).text() == 'Item 2') {
$(this.previousSibling).remove();
}
});
console.log($(this).text() == ' Some-Name2 From-Where - City, Illinois: (555) 555-5555 ')
。那是if分支的测试,至少需要一个“true”输出。如果没有,则仅记录$(this).text()
以更接近问题。如果jQuery版本和其他所有内容匹配,则可能只是个小问题。;) - dersvenhessespan
前面不仅有一个 |。我没想到空格会被识别为文本或其他节点。使用两个删除操作解决了问题。为了保险起见,考虑到我测试的文本字符串输出非常糟糕,我使用正则表达式去除空格和回车后进行比较。总的来说,你提供的方法很有效。非常感谢。 - user1729506操作文本节点并不是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
。andSelf
。addBack
是在1.8中添加的。 - John Dvorak$().map
确实返回一个jQuery对象。我刚刚检查过了。 - John Dvorak更新
这是一些直接的 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]);
}
}
.contents
找到文本节点。
$("#container").contents().each(function () {
//Text node
if (this.nodeType === 3) {
$(this).remove();
}
});
body
中删除文本节点(在我的示例中),但它们不会从spans
中删除,因此它们仍然存在于文档中。虽然如此,但这对您的目的应该是有效的。 - Explosion Pills找到 span
的父元素,然后使用 .html()
和 .replace()
方法。
JAVASCRIPT:
$('span:first-child').parent().html($('span:first-child').parent().html().replace(/\|/g, ''))
获取 spans
。移除所有内容。将 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(" "));
编辑: 使用相同的逻辑来处理这个非常特殊的情况的肮脏hack。正则表达式替换处理管道前后的0个或多个空格。
var $c = $(".container");
var html = $c.prop("outerHTML");
$c.empty();
$c.append(html.replace(/\s*\|\s*<span>Item 2/,"<span>Item 2" ));
previousSibling
方法更好。 - Malk
|
字符? - Leeish|
,我会使用 CSS 并设置border
属性的样式。 - elclanrs