获取DOM中的所有href链接

use*_*778 10 javascript google-chrome-extension

我需要编写将所有href链接从网页放入数组的代码.这是我到目前为止所拥有的:

var array = [];
var links = document.links;
for(var i=0; i<links.length; i++) {
  array.push(links[i].href);
}
Run Code Online (Sandbox Code Playgroud)

但是,这不适用于Gmail的收件箱这样的网页,因为部分链接位于iframe内.我怎样才能获得所有链接,包括iframe内的链接?

此外,这是谷歌Chrome扩展.在清单中,我将all_frames设置为true - 这会有所不同吗?

谢谢

Dmi*_*nov 15

有一点需要记住

  1. document.links
  2. document.images
  3. document.forms
  4. document.forms [0] .elements
  5. document.getElementsByName()
  6. document.getElementsByClassName()
  7. document.getElementsByTagName()

是对DOM对象的实时查询,因此在forLoops中它可能会显着减慢执行速度(因为i <links.length是每个循环的查询),如果你像这样检查数组长度:

var array = [];
var links = document.getElementsByTagName("a");
for(var i=0; i<links.length; i++) {
    array.push(links[i].href);
}
Run Code Online (Sandbox Code Playgroud)

相反,你最好这样做:

var array = [];
var links = document.getElementsByTagName("a");
for(var i=0, max=links.length; i<max; i++) {
    array.push(links[i].href);
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢。我学到了一些东西。认为它不适用于此问题,但肯定会对我有所帮助。:) (2认同)

小智 8

当然,你的代码开始时会得到'arr未定义'吗?

var array = [];
var links = document.links;
for(var i=0; i<links.length; i++) {
    arr.push(links[i].href);
}
Run Code Online (Sandbox Code Playgroud)

尝试:

var array = [];
var links = document.getElementsByTagName("a");
for(var i=0; i<links.length; i++) {
    array.push(links[i].href);
}
Run Code Online (Sandbox Code Playgroud)


Aar*_*son 6

我有一个方法用于访问IFrame中的数据.答案从来没有写下来阅读和使用,这是多么有趣:P.随意修改和滥用:

public HtmlElementCollection GetIFrameElements(String tmpTag, int Frame)
    {
        HtmlElementCollection tmpCollection = mWebBrowser.Document.Window.Frames[Frame].Document.Body.GetElementsByTagName(tmpTag);
        return tmpCollection;
    }
Run Code Online (Sandbox Code Playgroud)

然后我用它来寻找我之后的任何元素:

foreach (HtmlElement el in GetElements("input"))
        {
            if (el.GetAttribute("id").Equals("hasNoGoogleAccount"))
            {
                el.InvokeMember("click");
            }
        }
Run Code Online (Sandbox Code Playgroud)

您可以随时更改方法以循环并获取所有iFrame等等等等等,但这应该足以让您感动.给我评分!我是新来的