我有一个问题,我可以用一个 HTML 标签替换另一个吗?
但我不想让内容空白。
从:
<a data-text="text">content</a>
到:
<div data-text="text">content</div>
任何的想法?
我有一个问题,我可以用一个 HTML 标签替换另一个吗?
但我不想让内容空白。
从:
<a data-text="text">content</a>
到:
<div data-text="text">content</div>
任何的想法?
2018 更新:
使用ChildNode.replaceWith()方法。如 MDN 文档中所示:
var parent = document.createElement("div");
var child = document.createElement("p");
parent.appendChild(child);
var span = document.createElement("span");
child.replaceWith(span);
console.log(parent.outerHTML);
// "<div><span></span></div>"
在这个答案中有更多信息。
不可以。您不能更改DOM 节点的tagName( nodeName)。
您只能创建所需类型的新节点,复制所有属性(可能还有属性)并移动子节点。然而,您会丢失无法访问的东西,例如附加的事件侦听器。例如,当您想更改inputIE 中的 an 类型时,将使用此技术。
但是,绝对没有理由将 an 更改a为 a div,它们具有完全不同的语义(还有行为和布局)。
这是解决该问题的更现代(2020+)方法。
基本上你创建一个新元素,将属性转移给它,然后转移子元素,最后用新元素替换元素。
const p = document.getElementById('foo')
const a = document.createElement('a')
for (const attr of p.attributes) {
a.setAttribute(attr.name, attr.value)
}
a.innerHTML = p.innerHTML
p.replaceWith(a)
console.log(a.outerHTML)
<p id="foo" class="x" rel="follow">
Some <b id="a1">bold</b> text
</p>
当然可以,但为什么呢?
var a = document.getElementsByTagName('a');
var src, el, attrs;
for(var i=0,l=a.length;i<l;i++) {
src = a[i];
el = document.createElement('div');
attrs = src.attributes;
for(var j=0,k=attrs.length;j<k;j++) {
el.setAttribute(attrs[j].name, attrs[j].value);
}
el.innerHTML = src.innerHTML;
src.parentNode.replaceChild(el, src);
}
这将是无效的 HTML(div元素没有href属性)并且不再像链接一样。
但是,您可以使用 JavaScript 模拟该行为:
$('div').on('click', function() {
location.href = $(this).attr('href');
});
但请不要这样做。例如,它会中断鼠标中键(对于新选项卡)。