是否可以在字符串中查找和取消没有id的跨度?我有一个包含大量跨度的文本,其中一些有ID,而另一些则没有。
输入:
<span>Hi there!</span><span id="blabla">This is a test</span>
输出:
Hi there!<span id="blabla">This is a test</span>
我更喜欢JavaScript函数,但如果它让事情变得更容易,我不介意使用jQuery!
答案 0 :(得分:5)
您应该可以使用:not
伪选择器和“has-attribute”选择器的组合:
$("span:not([id])").contents().unwrap();
这是一个working example。请注意HTML代码是如何由4个span
元素组成的,CSS规则适用于所有span
元素,但不适用于没有span
的2个id
元素,因为它们已经被上面的jQuery打开了。
答案 1 :(得分:1)
$("span").each(function(){
if (this.id == "") $(this).replaceWith(this.innerHTML);
})
答案 2 :(得分:1)
$("span").each(function (i) {
if (this.id == '') {
alert('no have id');
} else {
alert('have id');
}
});
答案 3 :(得分:1)
使用jQuery这将非常简单。
$(function(){
$('span').each(function(){
if(typeof $(this).attr('id') == "undefined"){
$(this)[0].outerHTML = $(this).html();
}
});
});
参见工作示例here ..
答案 4 :(得分:1)
你走了:
input = '<span>Hi there!</span><span id="blabla">This is a test</span>';
output = $( '<div>' ).html( input ).children().each( function () {
!this.id && $( this ).replaceWith( $( this ).text() );
}).end().html();
现场演示: http://jsfiddle.net/3EXkh/3/
更新:以上函数形式的代码:
function untag( input ) {
return $( '<div>' ).html( input ).children().each( function () {
!this.id && $( this ).replaceWith( $( this ).text() );
}).end().html();
}
答案 5 :(得分:1)
这是一个纯JavaScript解决方案,FWIW:
Array.prototype.forEach.call(el.getElementsByTagName('span'), function(element){
var children;
if( ! element.id){
children = document.createDocumentFragment();
while(element.firstChild){
children.appendChild(element.firstChild);
}
element.parentElement.replaceChild(children, element);
}
});
在没有Array.prototype.forEach
的浏览器中使这项工作留给读者阅读。