2012-01-19 38 views
6

Tôi cần viết mã để đặt tất cả các liên kết href từ một trang web vào một mảng. Dưới đây là những gì tôi có cho đến nay:Nhận tất cả các liên kết href trong DOM

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

Tuy nhiên, điều này không làm việc trên một trang như hộp thư đến của Gmail, bởi vì một số trong các liên kết nằm trong một iframe. Làm cách nào để có được TẤT CẢ các liên kết, bao gồm các liên kết bên trong khung nội tuyến?

Ngoài ra, đây là tiện ích mở rộng google chrome. Trong tệp kê khai, tôi có all_frames được đặt thành true - điều này có tạo nên sự khác biệt không?

Cảm ơn

+1

Còn về 'document.getElementsByTagName ('a')' thì sao? –

+2

Tăng tỷ lệ chấp nhận của bạn .......... không quên đánh dấu câu trả lời là accpeted nếu nó hoạt động cho bạn ........ –

+1

'document.links' không nhận được tất cả các liên kết. Ngoài các liên kết không có giá trị 'href', nhưng bạn không cần những giá trị này bởi vì bạn muốn có giá trị href. Những gì nó không làm là nhận được liên kết trong iframe hoặc khung – Raynos

Trả lời

5

Tôi có một phương pháp tôi sử dụng để truy cập dữ liệu trong một IFrame. Làm thế nào thú vị mà câu trả lời không bao giờ được viết xuống để đọc và sử dụng: P. Hãy thoải mái để sửa đổi và lạm dụng:

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

sau đó tôi sử dụng nó để tìm kiếm bất cứ điều gì yếu tố Im sau:

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

Bạn luôn có thể thay đổi phương pháp để lặp qua và nhận được tất cả khung nội tuyến vv blah blah nhưng điều đó là đủ để giúp bạn di chuyển. Đánh giá tôi! Im mới

7

Chắc chắn bạn sẽ nhận được 'arr chưa được xác định' với mã của bạn để bắt đầu?

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

Hãy thử:

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

Ồ, vâng đó là những gì tôi có - typo. Tôi cần phải nhận được các liên kết bên trong iframe mặc dù. Làm thế nào tôi có thể làm điều đó? – user1137778

6

Một điều cần nhớ rằng

  1. document.links
  2. document.images
  3. document.form
  4. document.form [0] .elements
  5. document.getElementsByName ()
  6. document.getElementsByClassName()
  7. document.getElemen tsByTagName()

là các truy vấn trực tiếp cho các đối tượng DOM, do đó trong forLoops nó đáng kể có thể làm chậm thực hiện của bạn (như tôi < links.length là các truy vấn trên mỗi chu kỳ), nếu bạn kiểm tra độ dài mảng như thế này:

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

thay vào đó bạn làm tốt hơn này:

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

Cảm ơn. Tôi đã học được điều gì đó. Đừng nghĩ rằng nó áp dụng cho câu hỏi này, nhưng chắc chắn sẽ giúp tôi. :) – motorbaby

0

Từ mã bookmarklet Web Adjuster 's của tôi,

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) } 

Bạn có thể chuyển bất kỳ hàm nào vào all_frames_docs và nó sẽ được gọi lần lượt trên mọi khung và khung nội tuyến trong cửa sổ hiện tại, miễn là tập lệnh của bạn có quyền truy cập vào (ví dụ: đó là phần mở rộng hoặc bookmarklet).Vì vậy, tất cả các bạn phải làm bây giờ là mã chức năng để xử lý mỗi tài liệu, có thể đi qua document.getElementsByTagName("a") hoặc bất cứ điều gì, và làm cho chức năng này tham số của cuộc gọi của bạn để all_frames_docs.

Các vấn đề liên quan