我需要编写将所有href链接从网页放入数组的代码。这是我到目前为止所做的:
var array = [];
var links = document.links;
for(var i=0; i<links.length; i++) {
array.push(links[i].href);
}
但是,这不适用于Gmail的收件箱这样的网页,因为部分链接位于iframe中。如何获取所有链接,包括iframe中的链接?
此外,这是针对Google Chrome扩展程序的。在清单中,我将all_frames设置为true - 这是否会产生影响?
由于
答案 0 :(得分:12)
要记住的一件事
是对DOM对象的实时查询,因此在forLoops中它可能会显着减慢执行速度(因为i&lt; links.length是对每个循环的查询),如果你像这样检查数组长度:
var array = [];
var links = document.getElementsByTagName("a");
for(var i=0; i<links.length; i++) {
array.push(links[i].href);
}
相反,你最好这样做:
var array = [];
var links = document.getElementsByTagName("a");
for(var i=0, max=links.length; i<max; i++) {
array.push(links[i].href);
}
答案 1 :(得分:8)
当然,你的代码开始时你会得到'arr未定义'吗?
var array = [];
var links = document.links;
for(var i=0; i<links.length; i++) {
arr.push(links[i].href);
}
尝试:
var array = [];
var links = document.getElementsByTagName("a");
for(var i=0; i<links.length; i++) {
array.push(links[i].href);
}
答案 2 :(得分:6)
我有一个用于访问IFrame中数据的方法。答案从来没有写下来阅读和使用,这是多么有趣:P。 随意修改和滥用:
public HtmlElementCollection GetIFrameElements(String tmpTag, int Frame)
{
HtmlElementCollection tmpCollection = mWebBrowser.Document.Window.Frames[Frame].Document.Body.GetElementsByTagName(tmpTag);
return tmpCollection;
}
然后我用它来寻找我之后的任何元素:
foreach (HtmlElement el in GetElements("input"))
{
if (el.GetAttribute("id").Equals("hasNoGoogleAccount"))
{
el.InvokeMember("click");
}
}
您可以随时更改方法以循环并获取所有iFrame等等等等,但这应该足以让您感动。 给我评分!我是新的
答案 3 :(得分:0)
来自我的Web Adjuster小书签代码
function all_frames_docs(c) {
var f=function(w) {
if(w.frames && w.frames.length) {
var i; for(i=0; i<w.frames.length; i++) f(w.frames[i])
} c(w.document) };
f(window) }
您可以将任何函数传递到all_frames_docs
,并且会在当前窗口中依次调用每个框架和iframe,前提是您的脚本可以访问此类(即它的扩展名或小书签) )。所以你现在要做的就是编写处理每个文档的函数,可以通过document.getElementsByTagName("a")
或其他任何文件,并使这个函数成为你all_frames_docs
调用的参数。