2011-09-10 11 views
7

क्या जावास्क्रिप्ट में इसे लिखने का एक छोटा रास्ता है?जावास्क्रिप्ट: तालिका में सभी "इनपुट" ढूंढें

var data = []; 
    var table = document.getElementById('address'); 
    var rows = table.getElementsByTagName('tr'); 
    for (var x = 0; x < rows.length; x++) { 
     var td = rows[x].getElementsByTagName('td'); 
     for (var y = 0; y < td.length; y++) { 
      var input = td[y].getElementsByTagName('input'); 
      for (var z = 0; z < input.length; z++) { 
       data.push(input[z].id); 
      } 
     } 
    } 
+0

वैश्विक कोड से बचें! –

+0

मैंने केवल स्क्रिप्ट-टैग जोड़े क्योंकि मैंने सोचा था कि इसे हाइलाइट करने के लिए आवश्यक हो सकता है। –

+0

नोप ': पी' ..... –

उत्तर

7

element.getElementsByTagName सभी सन्तान, न केवल बच्चों पाता है, तो:

<script type="text/javascript> 

    var data = []; 
    var table = document.getElementById('address'); 
    var input = table.getElementsByTagName('input'); 
    for (var z = 0; z < input.length; z++) { 
     data.push(input[z].id); 
    } 

</script> 
2

हां।

var data = [], 
    inputs = document.getElementById('address').getElementsByTagName('input'); 

for (var z=0; z < inputs.length; z++) 
    data.push(inputs[z].id); 

ध्यान दें, यहां तक ​​कि तीन छोरों के साथ अपने लंबे समय तक संस्करण में आप भी कह सकते हैं:

var rows = table.rows; 
// instead of 
var rows = table.getElementsByTagName('tr'); 

// and, noting that it returns <th> cells as well as <td> cells, 
// which in many cases doesn't matter: 
var tds = rows[x].cells; 
// instead of 
var tds = rows[x].getElementsByTagName('td'); 
1

आधुनिक ब्राउज़रों :)

var table, inputs, arr; 

table = document.getElementById('test'); 
inputs = table.querySelectorAll('input'); 
arr = [].slice.call(inputs).map(function (node) { return node.id; }); 

लाइव डेमो के लिए:http://jsfiddle.net/HHaGg/

तो इसके बजाय ओ एफ for पाश, मैं map विधि का उपयोग करता हूं - प्रत्येक सरणी तत्व (प्रत्येक इनपुट नोड) को इसके आईडी मान के साथ प्रतिस्थापित किया जाता है।

यह भी ध्यान रखें क्योंकि inputs एक NodeList तत्व है कि `inputs.map(... काम नहीं करता है - यह एक सरणी जैसी वस्तु एक मानक सरणी है, लेकिन नहीं। अभी भी map विधि का उपयोग करने के लिए, हमें इसे एक सरणी में बदलना होगा जो [].slice.call(inputs) हमारे लिए करता है।

+0

क्या यह तेजी से 'लूप' लूप है? –

+0

अंतिम ब्राउज़र (सबसे आधुनिक ब्राउज़र) कौन सा है जिस पर यह अभी तक काम नहीं करता है? –

+0

@ एसआईडी आईई 8। 'Array.prototype.map' नई ES5 सुविधाओं में से एक है। –

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