2012-12-07 38 views
2

假设我的HTML看起来我的HTML看起来像这样JQuery的 - 除去中间元素

<p> 
"a" 
"c" 
</p> 

这样

<p>a<span>b</span>c</p> 

$("span").remove(); 

我怎么合并这两个部分后合并在一起,所以我的HTML看起来像<p>ac</p>

jsfiddle

+4

你为什么如此迷恋上了吗? – Alexander

+0

称之为强迫症和好奇:) – Gal

+0

的组合,我会给出最好的答案永远 - >'$(P)的.html(“交流”);' – adeneo

回答

3
$("span").remove(); 
$("p").html($("p").html()); 
​ 

结果:

<p>ac</p> 
+0

嗯,这是......烦人简单。 – Gal

+1

我相信所有的孩子节点的绑定将不复存在。很抱歉,不能那么容易 – Alexander

+0

@Alexander这_is_的限制。通常情况下,不会有直接的绑定,但是(特别是当事件委托很容易)。 –

0

这里是一个,它不仅影响文本节点连接的任何两个连续的。

$("span").click(function() { 
    var parent = this.parentNode; 
    $(this).remove(); 
    normalize(parent); 
}); 
function normalize(element){ 
    var contents = $(element).contents(); 
    contents.each(function(i){console.log(this.nodeType); 
     if (this.nodeType == 3 && i > 0){ 
      var prev = contents[i-1]; 
      if (prev.nodeType == 3){ 
       this.nodeValue += prev.nodeValue; 
       prev.parentNode.removeChild(prev); 
      } 
     } 
    }); 
} 

http://jsfiddle.net/mowglisanu/dgBwc/13/

0
var p = $('p'), 
    p2 = p.clone(true); 
    p2.find('span').remove(); 
    p2.text(p2.text()); 
    p.parent().empty().append(p2); 

FIDDLE

保持绑定!

0

我知道这是老了,但是这是Node.normalize是:

$('p').get(0).normalize() 

的Node.normalize()方法把指定的节点及其所有子树变成了“标准化”形成。在标准化的子树中,子树中的文本节点都是空的,并且没有相邻的文本节点。