2010-09-15 29 views
10

जावास्क्रिप्ट का उपयोग करके मुझे आईडी की आईडी के साथ मौजूद तत्वों की संख्या कैसे प्राप्त हो सकती है [x]?जावास्क्रिप्ट: आईडी आईडी के साथ सभी तत्व प्राप्त करें [x]

नमूना HTML:

<input name="vrow[0]" id="vrow[0]" value="0" type="text"/> 
<input name="vrow[1]" id="vrow[1]" value="0" type="text"/> 
<input name="vrow[2]" id="vrow[2]" value="0" type="text"/> 
<input name="vrow[3]" id="vrow[3]" value="0" type="text"/> 

ऊपर एचटीएमएल उपयोगकर्ता इनपुट के आधार पर उत्पन्न होता है। मैं कैसे पता लगा सकता हूं कि जावास्क्रिप्ट का उपयोग करके कितने तत्व मौजूद हैं?

वर्तमान में मैं इस

नमूना जावास्क्रिप्ट

if(document.getElementById('vrow[0]')){ 
var row=0; 
    } 
if(document.getElementById('vrow[1]')){ 
row=1; 
    } 
... 

उत्तर

16

[]are not valid characters in ID attributes HTML4.01 में की तरह एक तत्व की उपस्थिति का पता लगाने कर सकते हैं। यहां तक ​​कि एचटीएमएल 5 में, हालांकि, आप नाम विशेषता (संख्यात्मक अनुक्रमित के बिना) का उपयोग करना चाहिए, और उसके बाद का उपयोग getElementsByName():

<input name="vrow" value="0" type="text"/> 
<input name="vrow" value="0" type="text"/> 
<input name="vrow" value="0" type="text"/> 
<input name="vrow" value="0" type="text"/> 
var vrows = document.getElementsByName("vrow"); 
alert(vrows.length);

ध्यान दें कि IE और ओपेरा के पुराने संस्करणों id गुण उस के साथ तत्व वापस आ सकते हैं getElementsByName() में निर्दिष्ट नाम के समान मूल्य। आईई गैर-इनपुट तत्वों को एक नाम विशेषता के साथ भी वापस कर सकता है जिसमें एक ही मूल्य है।

+0

Fwiw, getElementsByName() आईई या ओपेरा में समर्थित नहीं है। या बल्कि, यह समर्थित है, लेकिन सही ढंग से नहीं: http://www.quirksmode.org/dom/w3c_core.html – Robusto

+0

धन्यवाद। मूल बातें मायने रखती हैं। – abel

+0

@ रोबस्टो: बशर्ते आप उन मुद्दों के लिए देखें, कोई समस्या नहीं होनी चाहिए। इसे प्रतिबिंबित करने के लिए मेरा उत्तर अपडेट किया गया। –

4
var inputTags = document.getElementsByTagName('INPUT'); 
var count=0; 
for(var i=0;i<inputTags.length;i++) 
if(inputTags[i].id.contains('vrow[') 
count++; 
+0

दिलचस्प। लेकिन मुझे ऑब्जेक्ट मिलता है इस ऑब्जेक्ट या विधि का समर्थन नहीं करता है। – abel

2

getElementById हमेशा एक तत्व देता है (क्योंकि आईडी अद्वितीय है)। getElementsByName तत्वों की एक सूची का परिणाम हो सकता है।

<html> 
<head> 
<script> 
    function getElements() { 
    var elements = document.getElementsByName("vrow[]"); 
    alert(elements.length); 
    } 
</script> 
</head> 
<body onload="getElements()"> 
<input name="vrow[]" id="vrow_0" value="0" type="text"/> 
<input name="vrow[]" id="vrow_1" value="0" type="text"/> 
<input name="vrow[]" id="vrow_2" value="0" type="text"/> 
<input name="vrow[]" id="vrow_3" value="0" type="text"/> 
</body> 
</html> 
2

आप इस तरह के प्रोटोटाइप के रूप में एक प्रश्न समारोह समर्थन CSS3, के साथ एक JavaScript लाइब्रेरी का उपयोग करते हैं, तो आप विशेषता का उपयोग कर सकते हैं शुरू होता है-साथ चयनकर्ता आईडी खोजने के लिए vrow [

प्रोटोटाइप में

तो साथ शुरुआत विशेषताओं यह होगा हो

$$('input[id^=vrow[]').each

एनबी इस अपरीक्षित है, तो आप [चयनकर्ता में से बचने के लिए हो सकता है

Prototype $$ function

3

किसी कारणवश आप अपना इनपुट तत्वों के नाम का उपयोग कर सकते के साथ रहना चाहते हैं के लिए हैं:

var inputs = Array.prototype.slice.call(document.getElementsByTagName('input')); 
var rows = inputs.filter(function (el) { return el.name.indexOf('vrow[') == 0 }); 
alert(rows.length); 
संबंधित मुद्दे