我遇到了问题,因为我想要将页面中的所有跨度替换为标记b。
这是演示,但很糟糕。要更改所有范围,我必须在按钮上单击2次
Jquery的:
$('#myButton').click(function(){
$("span").replaceWith(function(){
return $("<b>" + $(this).html() + "</b>");
});
});
HTML:
<span>fdfdfd <span>hytrytryrt</span> fdfdfdf</span>
<button id="myButton">Change my link to a span</button>
这是链接:
答案 0 :(得分:1)
我刚想到了!,尝试reverse
元素集合,然后调用.replaceWith()
$('#myButton').click(function(){
$($("span").get().reverse()).replaceWith(function(){
return $("<b>" + $(this).html() + "</b>");
});
});
答案 1 :(得分:1)
<span>fdfdfd <span>hytrytryrt</span> fdfdfdf</span>
<button id="myButton">Change my link to a span</button>
$('#myButton').click(function(){
$("span").replaceWith(function(){
return $("<b>" + $(this).text() + "</b>");
});
});
演示:
答案 2 :(得分:0)
首先,您的标记无效。它应该是:
<span>fdfdfd</span> <span>hytrytryrt</span> <span>fdfdfdf</span>
并用b:
更改范围$('#myButton').click(function(){
$("span").each(function(){
$(this).replaceWith("<b>" + $(this).html() + "</b>");
});});
<强> Working Demo 强>
答案 3 :(得分:0)
像这样更改你的HTML
$('#myButton').on('click',function(){
$("span").replaceWith(function(){
return $("<b>" + $(this).text() + "</b>");
});
});
注意强>
先前 jQuery 1.9 , .replaceWith()会尝试添加或更改当前jQuery集中的节点,如果第一个节点在该集合未连接到文档,在这些情况下return a new jQuery set
而不是original set.
该方法可能会或可能不会返回新结果,具体取决于其参数的数量或连接性!
从 jQuery 1.9 开始,.replaceWith()
始终为return the original unmodified set
。尝试在没有父项的节点上使用这些方法没有effect—that
,既不会更改集合也不会更改它包含的节点。
答案 4 :(得分:0)
这可能最好用纯JavaScript完成,没有jQuery。您只需获取所有span
元素,然后在DOM中将每个元素替换为您创建的b
元素,并将span
的内容分配给它。
<button id="myButton" onclick="chg()">Change span to b</button>
<script>
function chg() {
var spans = document.getElementsByTagName('span');
for(var i = spans.length - 1; i >= 0; i--) {
var b = document.createElement('b');
b.innerHTML = spans[i].innerHTML;
spans[i].parentNode.replaceChild(b, spans[i]);
}
}
</script>
for
循环“向后”运行,因为getElementsByTagName
方法按树顺序返回 live 元素集合。因此,如果您从索引0开始,您将(在简单示例中)首先处理外部span
元素,当您到达内部元素时,集合已缩小,因此它只有一个成员,在索引处0,因此内部span
将不会被处理。
此代码不会复制span
元素的任何属性;如果有要保留的属性,请添加用于复制它们的代码。
P.S。我怀疑真正的问题与提出的问题本质上是不同的,因为将所有span
元素更改为b
元素仅在相当特殊的情况下才有意义,并且按钮文本“将我的链接更改为范围”在问题中根本不符合描述或代码片段。