DOM

2012-01-19 14 views
6

में सभी href लिंक प्राप्त करें मुझे कोड लिखने की आवश्यकता है जो सभी href लिंक को वेबपृष्ठ से सरणी में डाल देता है। ,DOM

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

हालांकि, इस Gmail का इनबॉक्स की तरह एक पेज पर काम नहीं करता क्योंकि कुछ लिंक iframe के भीतर कर रहे हैं: यहाँ मैं अब तक राशि है। मैं iframe के अंदर वाले लिंक सहित सभी कैसे प्राप्त कर सकता हूं?

इसके अलावा, यह एक Google क्रोम एक्सटेंशन के लिए है। मैनिफेस्ट में, मेरे पास all_frames सत्य पर सेट हैं - क्या इससे कोई फर्क पड़ता है?

धन्यवाद

+1

'document.getElementsByTagName ('a')' के बारे में क्या? –

+2

अपनी अभिसरण दर बढ़ाएं .......... अगर यह आपके लिए काम करता है तो उत्तर को चिह्नित करने के लिए मत भूलना ........ –

+1

'document.links' को सभी लिंक मिलते हैं। 'Href' मान के बिना लिंक के अलावा, लेकिन आपको उन लोगों की आवश्यकता नहीं है क्योंकि आप href मान चाहते हैं। यह नहीं करता है कि iframes या फ्रेम में लिंक प्राप्त करें – Raynos

उत्तर

5

मैं एक विधि मैं एक IFrame में डेटा एक्सेस करने हेतु उपयोग किया है। यह कितना मजेदार है कि जवाब पढ़ने और उपयोग करने के लिए कभी लिखा नहीं गया है: पी। संशोधित करने के लिए स्वतंत्र महसूस और दुरुपयोग:

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

तुम हमेशा लूप करने के लिए विधि बदलें और मिल सकता है सभी iFrames आदि, ऐसा लेकिन यह आपको आगे बढ़ने के लिए पर्याप्त होना चाहिए। मुझे रेट करें! इम नए

7

निश्चित रूप से आप प्राप्त करने के लिए अपने कोड के साथ शुरू करने के साथ 'आगमन से परिभाषित नहीं है' जा रहे हैं?

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); 
} 
+1

ओह, हाँ, यही मेरे पास था - टाइपो। हालांकि मुझे iframes के अंदर लिंक प्राप्त करने की आवश्यकता है। मैं उसे कैसे कर सकता हूँ? – user1137778

6

एक बात याद रखना होगा कि

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

लाइव प्रश्नों डोम वस्तुओं को इसलिए forLoops में यह काफी अपने निष्पादन धीमा हो सकता है (जैसा कि मैंने < 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

धन्यवाद। मैंने कुछ सीखा ऐसा नहीं लगता कि यह इस प्रश्न पर लागू होता है, लेकिन निश्चित रूप से मेरी मदद करता है। :) – motorbaby

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 में पास कर सकते हैं और इसे वर्तमान विंडो में प्रत्येक फ्रेम और आईफ्रेम पर बदले में बुलाया जाएगा, बशर्ते आपकी स्क्रिप्ट को इस तरह की पहुंच हो (यानी। यह एक विस्तार या एक बुकमार्कलेट है)।तो अब आपको बस इतना करना है कि प्रत्येक दस्तावेज़ को संभालने के लिए कोड फ़ंक्शन है, जो document.getElementsByTagName("a") या जो कुछ भी हो सकता है, और यह कार्य all_frames_docs पर आपके कॉल का पैरामीटर बना सकता है।