HTML を操作するスクリプトでは elem.innerHTML や elem.innerText のようなプロパティが使えれば便利なのですが、 Mozilla には innerText がありません。こういう場合、自分で似たような関数を作っておくと便利です。
以下は、再帰処理を使った例。
function getInnerText(node) {
var nodes = node.childNodes,
ret = [];
for (var i = 0; i < nodes.length; i++)
if (nodes[i].hasChildNodes())
ret.push(getInnerText(nodes[i]));
else if (nodes[i].nodeType == Node.TEXT_NODE)
ret.push(nodes[i].nodeValue);
else if (nodes[i].alt)
ret.push(nodes[i].alt);
return ret.join('');
}
再帰処理を使わない場合はこんな感じ。
function getInnerText(node) {
if (!node || !node.firstChild) return '';
node = node.firstChild;
var depth = 1,
ret = [];
traceTree:
while (node && depth > 0) {
if (node.hasChildNodes()) {
node = node.firstChild;
depth++;
} else {
if (node.nodeType == Node.TEXT_NODE)
ret.push(node.nodeValue);
else if (node.alt)
ret.push(node.alt);
while (!node.nextSibling) {
node = node.parentNode;
depth--;
if (!node) break traceTree;
}
node = node.nextSibling;
}
}
return ret.join('');
}