2010-02-06 13 views
24

मुझे सभी input ऑब्जेक्ट्स प्राप्त करने और onclick परम में हेरफेर करने की आवश्यकता है।किसी ऑब्जेक्ट का उपयोग किए बिना जावास्क्रिप्ट का उपयोग करके सभी इनपुट ऑब्जेक्ट्स की सूची प्राप्त करें

निम्नलिखित <a> लिंक के लिए नौकरी करता है। input टैग के लिए ऐसा कुछ ढूंढ रहे हैं।

for (var ls = document.links, numLinks = ls.length, i=0; i<numLinks; i++){ 
    var link = unescape(ls[i].href); 
    link = link.replace(/\\'/ig,"#"); 
    if(ls[i].href.indexOf("javascript:") == -1) 
    { 
    ls[i].href = "javascript:LoadExtern(\\""+link+"\\",\\"ControlPanelContent\\",true,true);"; 
    } 
} 
+1

ओच, यह बदसूरत है और इसमें कई भागने वाली समस्याएं हैं। आप कभी भी 'जावास्क्रिप्ट' यूआरएल का उपयोग नहीं करना चाहते हैं। इस विशेष कोड के लिए मेरा सुझाव: 'href' कहां छोड़ें और इसके बजाय बस 'ls [i] .onclick = function() {LoadExtern (this.href,' ControlPanelContent ', true, true) सेट करें; }; '। – bobince

उत्तर

68

(जवाब के अंत में अद्यतन देखें।)

आप के माध्यम से के माध्यम से getElementsByTagName (DOM specification, MDC, MSDN) तो बस पाश input सभी तत्वों का का एक NodeList प्राप्त कर सकते हैं यह:

var inputs, index; 

inputs = document.getElementsByTagName('input'); 
for (index = 0; index < inputs.length; ++index) { 
    // deal with inputs[index] element. 
} 

वहां मेरे पास है इसे document पर इस्तेमाल किया, जो पूरे दस्तावेज़ को खोजेगा। यह भी अलग-अलग तत्वों (DOM specification) पर मौजूद है आप पूरे दस्तावेज़ की तुलना में केवल उनके वंश खोज करने के लिए नहीं बल्कि अनुमति देता है, उदाहरण के लिए:

var container, inputs, index; 

// Get the container element 
container = document.getElementById('container'); 

// Find its child `input` elements 
inputs = container.getElementsByTagName('input'); 
for (index = 0; index < inputs.length; ++index) { 
    // deal with inputs[index] element. 
} 

... लेकिन आप जो बोलते हैं उसे आप माता-पिता का उपयोग नहीं करना चाहते हैं form , इसलिए पहला उदाहरण आपके प्रश्न पर अधिक लागू होता है (दूसरा पूर्णता के लिए है, अगर किसी और को यह उत्तर ढूंढने की आवश्यकता है)।


अद्यतन: getElementsByTagName ऊपर करने के लिए एक पूरी तरह से ठीक तरीका है, लेकिन क्या तुम कुछ थोड़ा और अधिक जटिल है, बस input सभी तत्वों के के बजाय चेक बॉक्स के सभी खोजने की तरह करना चाहते हैं?

वह जगह जहां उपयोगी querySelectorAll आता है: यह हमें से मेल खाने वाले तत्वों की एक सूची प्राप्त करने देता है जो हम चाहते हैं। तो हमारे चेकबॉक्स उदाहरण के लिए:

var checkboxes = document.querySelectorAll("input[type=checkbox]"); 

आप इसे तत्व स्तर पर भी उपयोग कर सकते हैं। जो सिर्फ पाता

var fooSpans = element.querySelectorAll("span.foo"); 

querySelectorAll और उसके चचेरे भाई querySelector (: उदाहरण के लिए, अगर हम हमारे element चर में एक div तत्व है तो हम उस कि div इस तरह के अंदर हैं वर्ग foo साथ span रों के सभी पा सकते हैं पहले आपको एक सूची देने के बजाय मिलान तत्व) सभी आधुनिक ब्राउज़रों और आईई 8 द्वारा समर्थित हैं।

+0

आपने ++ इंडेक्स का उपयोग क्यों किया? नोडलिस्ट में तत्व 0 से शुरू होते हैं ... इस तरह, आप पहले तत्व को छोड़ देते हैं ?? – Alko

+5

@Alko: मैं * पहले * छोड़ नहीं है। लूप ** के भीतर 'इंडेक्स' का पहला मान **' 0' है। पहले लूप पुनरावृत्ति के बाद तक '++ अनुक्रमणिका' नहीं होता है। –

6
var inputs = document.getElementsByTagName('input'); 
for (var i = 0; i < inputs.length; ++i) { 
    // ... 
} 
संबंधित मुद्दे

 संबंधित मुद्दे