问问题
313 次
5 回答
8
You need to unwrap the contents then
$('.mainmenu a:not([href])').contents().unwrap()
:not to filter out elements without an href
tag
.contents() returns a jQuery object that contains the contents - which is the text
.unwrap() removes the anchor tag around it
于 2013-08-07T13:44:11.990 回答
4
纯 JavaScript
如果你想要一些基于性能的代码,试试这个。
var emptyAnchors = document.querySelectorAll('.mainmenu a:not([href])');
var content = "";
for (var a in emptyAnchors) {
if(emptyAnchors[a].nodeType == 1)
{
content = document.createTextNode(emptyAnchors[a].innerHTML);
emptyAnchors[a].parentNode.insertBefore(content, emptyAnchors[a]);
emptyAnchors[a].parentNode.removeChild(emptyAnchors[a]);
}
}
性能评估
现场演示
jQuery
使用 JQuery$.unwrap()
方法。这将获取所选 DOMElement 的 textnode 并将其从元素中提取,然后删除空元素。
$('.mainmenu a:not([href])').each(function(){
$(this).contents().unwrap(); /* Will delete the tag but keep its content */
});
现场演示
注意:这几乎是所选答案的替代方案,效率更高。
于 2013-08-07T13:42:27.797 回答
1
- 使用
:not
CSS3 选择器。 - 使用
.replaceWith
方法。
$('.mainmenu a:not([href])').each(function(){
$(this).replaceWith($(this).text());
});
于 2013-08-07T13:39:11.233 回答
1
另一种解决方案是将父元素的内容替换为要删除的元素的内容$(this).replaceWith($(this).contents())
于 2013-08-07T13:48:40.397 回答
-1
Try :
$('.mainmenu a:not([href])').each(function() {
var $this = $(this);
$this.replaceWith($this.text());
});
Might be a little quicker :
$('.mainmenu a').each(function() {
var $this = $(this);
$this.attr('href') || $this.replaceWith($this.text());
});
于 2013-08-07T13:44:10.917 回答