function htmlIsWhitespace(input) {
\t var visible = [
\t \t \t 'img','iframe','object','hr',
\t \t \t 'audio', 'video',
\t \t \t 'form', 'button', 'input', 'select', 'textarea'
\t \t ],
\t \t container = document.createElement('div');
\t container.innerHTML = input;
\t return !(container.innerText.trim().length > 0 || container.querySelector(visible.join(',')));
}
// And the tests (I believe these are comprehensive):
var testStringsYes = [
\t \t "",
\t \t "<a href='#'></a>",
\t \t "<a href='#'><span></span></a>",
\t \t "<a href='#'><span> <!-- comment --></span></a>",
\t \t "<a href='#'><span> </span></a>",
\t \t "<a href='#'><span> </span></a>",
\t \t "<a href='#'><span> </span></a> ",
\t \t "<p><a href='#'><span> </span></a> </p>",
\t \t " <p><a href='#'><span> </span></a> </p> <p></p>",
\t \t "<p>\n \n</p><ul><li></li></ul>"
\t ],
\t testStringsNo = [
\t \t "<a href='#'><span> hi</span></a>",
\t \t "<img src='#foo'>",
\t \t "<hr />",
\t \t "<div><object /></div>",
\t \t "<div><iframe /></div>",
\t \t "<div><object /></div>",
\t \t "<div><!-- hi -->bye</div>",
\t \t "<div><!-- what --><audio></audio></div>",
\t \t "<div><!-- what --><video></video></div>",
\t \t '<form><!-- empty --></form>',
\t \t '<input type="text">',
\t \t '<select name="foo"><option>1</option></select>',
\t \t '<textarea>',
\t \t '<input type="text">',
\t \t '<form><input type="button"></form>',
\t \t '<button />',
\t \t '<button>Push</button>',
\t \t "yo"
\t ];
for(var yy=0, yl=testStringsYes.length; yy < yl; yy += 1) {
\t console.debug("Testing", testStringsYes[yy]);
\t console.assert(htmlIsWhitespace(testStringsYes[yy]));
}
for(var nn=0, nl=testStringsNo.length; nn < nl; nn += 1) {
\t console.debug("Testing", testStringsNo[nn]);
\t console.assert(!htmlIsWhitespace(testStringsNo[nn]));
}
あなたは – Musa
使用するDOM APIは十分ではないかもしれないだけでマークアップを見て、ページにコンテンツをレンダリングするためにCSSを使用することができ、あなたは空白を考慮する文字のリストを持って、再帰的に確認与えられたノードの唯一の内容が空白文字であるか(またはそのノードがコメントなどであるか)、そのノードを削除するかどうか。ノードがなくなってしまった場合は、すべて空白になります。 - これは、たとえば、白い背景に白いテキストをキャッチしないことに注意してください... – deceze