2016-09-11 5 views
1

私はそれを調べるときに、3つのテキストノードとおそらくBOLDまたはITALICのような要素が続くWebページDOMに文があるとします。隣接するテキストノードが無意味なので、テキストノードを1つのテキストノードにマージする必要があります。それらを持つ理由はありません。それらを簡単にマージする方法はありますか? おかげDOM内の隣接するテキストノードをJavascriptとマージできますか?

+2

これに関するいくつかのコードはありますか? –

+0

実際のDOMを破壊したくない場合は、それらのすべてを検索し、最初のものに手作業で結合し、他のものを削除する必要があります。それ以外の場合は、['Element.outerHTML'](https://developer.mozilla.org/en/docs/Web/API/Element/outerHTML)を単独で置き換えることもできます。ほとんどの場合、1つのテキストノードが再び生成されます。しかし、あなたがそれを気にする理由は何ですか? –

+0

*「持っている理由はありません」*:持っていない理由もないようです。これをブラウザに残して管理してください。 – trincot

答えて

0

は多分これはあなたを助ける:

var parentNode = document.getElementById('pelements'); 
 
var textNode = document.createElement('p'); 
 

 
while (parentNode.firstChild) { 
 
    textNode.textContent += parentNode.firstChild.textContent; 
 
    parentNode.removeChild(parentNode.firstChild); 
 
} 
 

 
parentNode.appendChild(textNode);
<div id="pelements"> 
 
    <p>A</p> 
 
    <p>B</p> 
 
    <p>C</p> 
 
    </div>

0

ことは可能ですが、親要素を指定する必要があります。 DOM全体とすべてのノードをトラバースすることは可能であるはずですが、それを避けることができればそれが良いでしょう。

nodes = document.body.childNodes; 
nodesToDelete = []; 

function combineTextNodes(node, prevText) { 
    if (node.nextSibling && node.nextSibling.nodeType == 3) { 
     nodesToDelete.push(node.nextSibling); 
     return combineTextNodes(node.nextSibling, prevText + node.nodeValue); 
    } else { 
     return prevText + node.nodeValue; 
    } 
} 

for (i = 0; i < nodes.length; i++) { 
    if (nodes[i].nodeType == 3) { 
     nodes[i].nodeValue = combineTextNodes(nodes[i], ''); 
    } 
} 

for (i = 0; i < nodesToDelete.length; i++) { 
    console.log(nodesToDelete[i]); 
    nodesToDelete[i].remove(); 
} 
関連する問題