2011-11-10 14 views
4

は、どのように私は、内側のdivの位置を検出し、私は必要なものを手に入れることができますか?のdiv操作

+0

あなたはidのdiv要素にこの全体の事を包むと罰金だろうか? –

+3

もっと具体的にする必要があります。この質問は非常に曖昧です。 –

+1

@Matt質問に与えられた入力と出力より、どれくらい具体的に得ることができますか? – Birey

答えて

3
var outers = document.getElementsByClassName("out"); 

[].forEach.call(outers, function(outer) { 
    var inner = outer.getElementsByClassName("in")[0]; 
    var children = outer.childNodes; 

    var flag = true; 
    var before = document.createElement("div"); 
    var after = document.createElement("div"); 
    before.classList.add("out"); 
    after.classList.add("out"); 

    [].slice.call(children).forEach(function(node) { 
     if (node == inner) { 
      return flag = false; 
     } 
     if (flag) { 
      before.appendChild(node); 
     } else { 
      after.appendChild(node); 
     } 
    }); 
    var frag = document.createDocumentFragment(); 
    frag.appendChild(before); 
    frag.appendChild(inner); 
    frag.appendChild(after); 
    outer.parentNode.replaceChild(frag, outer); 
}); 

Live Example

0

これは新しいdiv要素の中に所望の構造を作成します。

<div class="out"> 
out asdaasd 
<div class="in"> in </div> 
out 
</div> 

<div id="xyz"> 
</div> 

$('.out').contents().each(function() {   
    if(this.nodeType == 3) { 
     $('#xyz').append("<div class='out'>"+$(this).text()+"</div>"); 
    } 
    else { 
     $('#xyz').append(this); 
    } 
}); 
+1

jQueryを使用したときにテキストノードが破損しました – Raynos

+0

どういう意味ですか?テキストノードとその値をこのコードで正しく取得できます。 – Vikk

+0

私はそれを取得しません。テキストノード(out asdaasd)のidと '3'のテキストノード(out)の2つのdiv ...複数のテキストノードをマージしているのはなぜですか? DOMと汚いhtml文字列をハックする? – Vikk

0
var a = $('<div class="out"> out asdaasd<div class="in"> in </div>out</div>'), 
    tmp = $("<div/>"); 

a.contents().each(function() { 
if(this.nodeType == 1) 
    tmp.append(this); 
else 
    tmp.append($(this).wrap("<div class='out' />").parent()); 
}); 
tmp.html() 
+0

それはそれ自身のdiv内にすべてのテキストノードをラップして2つ以上の '.out' divを作成します – Raynos