是否有一个JavaScript语句可以从网页中检索内容/文本?
答案 0 :(得分:4)
您可以使用Range
s / TextRange
来完成此操作。这样做的好处是只能在页面上获取可见文本(例如,与非IE浏览器中元素的textContent
属性不同,这也会为您提供<script>
的内容以及其他可能的内容元件)。以下内容适用于所有主流浏览器,但我不能保证不同浏览器之间换行符的一致性。
2012年11月更新
这些天我认为这不是一个好主意。虽然现在指定了Selection
its toString()
method is not,并且有一段时间(包括Microsoft在为IE 9实现它时),但指定它的行为类似于textContent
。对于这种特殊的方法,自2009年以来,浏览器的一致性变差而不是更好。
function getBodyText(win) {
var doc = win.document, body = doc.body, selection, range, bodyText;
if (body.createTextRange) {
return body.createTextRange().text;
} else if (win.getSelection) {
selection = win.getSelection();
range = doc.createRange();
range.selectNodeContents(body);
selection.addRange(range);
bodyText = selection.toString();
selection.removeAllRanges();
return bodyText;
}
}
alert( getBodyText(window) );
答案 1 :(得分:1)
这有点奇怪。你的意思是<p>
和<span>
之类的标签还是像<title>
那样更险恶的东西?如果你要整整一页,你确定你需要在JS中这样做吗?听起来像是XSS攻击:P
另外,我不知道有什么内置会这样做,但是你总是可以编写一个函数来使用document.getElementsByTagName
访问DOM并以这种方式删除文本。
答案 2 :(得分:1)
如果您要抓取的页面来自同一个域,那么它非常直接。您只需使用AJAx将该页面作为文本,然后从那里找到您想要的内容。这是一个例子:
<script>
function ajax(url, callbackFunction) {
var request = new XMLHttpRequest();
request.open("GET", url, true);
request.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");
request.onreadystatechange = function() {
var done = 4, ok = 200;
if (request.readyState == done && request.status == ok) {
if (request.responseText) {
callbackFunction(request.responseText);
}
}
};
request.send();
}
var buttonClicked = function () {
ajax('/~jedi/index.html', getComplete);
}
var getComplete = function (text) {
alert(text);
}
</script>
<button onclick="buttonClicked()">Debug</button>
如果该网页来自其他网域,则表示您运气不佳。您需要在服务器上执行此操作。您可以使用IFrame从其他域加载页面上的数据(您可以通过编程方式创建不可见的IFrame),但由于安全策略,浏览器不允许您读取该数据。
答案 3 :(得分:-1)
如果您只想要当前所在页面的HTML内容:
var html = document.getElementsByTagName('html')[0].innerHTML;
如果您想将HTML用于另一个页面Google“Ajax”