Javascript to untag spans without id

时间:2011-11-14 23:08:00

标签: javascript jquery

是否可以在字符串中查找和取消没有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!

6 个答案:

答案 0 :(得分:5)

您应该可以使用:not伪选择器和“has-attribute”选择器的组合:

$("span:not([id])").contents().unwrap();

这是一个working example。请注意HTML代码是如何由4个span元素组成的,CSS规则适用于所有span元素,但不适用于没有span的2个id元素,因为它们已经被上面的jQuery打开了。

contents方法会返回所选元素的所有子元素,而unwrap会删除父元素,在这种情况下,父元素将是不需要的span

答案 1 :(得分:1)

$("span").each(function(){
    if (this.id == "") $(this).replaceWith(this.innerHTML);
})

http://jsfiddle.net/qDR32/

答案 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();
} 

现场演示: http://jsfiddle.net/3EXkh/4/

答案 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的浏览器中使这项工作留给读者阅读。