childNodesの挙動がfirefoxでおかしい件


参考リンク:http://kusumoto.osakazine.net/e162722.html

簡単にいうと、IEではNodeとして認識しないものを(改行コード・タブ文字・空白 等)、
firefoxsafariでは認識してしまう現象が起こってしまうようです。




対策方法としては、コードの最初で必要のないnodeを消してしまう。
ということで解決したいと思います。




解決方法1


→for文で再帰的にループさせて、タブとか改行コードのノードを削除する

function child_node(node) {
for (var i = 0; i < node.childNodes.length; i++) {

//if文で必要なノードか、必要でないコードか判断
if (node.childNodes[i].textContent === "\n\n" ||node.childNodes[i].textContent === "\n" ||node.childNodes[i].textContent === "\t" ||node.childNodes[i].textContent === " \n") {
if(node.childNodes[i].nodeName == '#text'){

//ノード削除!削除した分だけデクリメントする
node.removeChild(node.childNodes[i]);
i--;
}
}else{
//ここで再帰的にchild_nodeを呼び出す
child_node(node.childNodes[i]);
}
}
}
//一番最初にdecumentを渡す
child_node(document);



解決方法2


→HTMLのソースからごそっと不必要なものを置換する

document.body.innerHTML = document.body.innerHTML.replace(/>[\r\n\s]*<');






明らかに2個目のほうが、すっきりすぎる!!!


師匠に感謝^v^