2011-02-11 9 views
16

द्वारा किसी तालिका से एक पंक्ति हटाएं मुझे एक छोटी सी समस्या है। मेरे पास कुछ गतिशील रूप से बनाए गए टेबल हैं और प्रत्येक पंक्ति में एक आईडी है। मैं आईडी "एक्स" के साथ पंक्ति को हटाना चाहता हूं।आईडी

मैंने सामान्य विधि (removeChild) की कोशिश की लेकिन यह स्पष्ट रूप से तालिकाओं के लिए काम नहीं करता है।

function deleteRow(tableid, rowid) 
{ 
     document.getElementById(tableid).removeChild(document.getElementById(rowid)); 
} 

त्रुटि मैं मिलता है: नोड नहीं मिला था "कोड:" 8

मैं भी इस की कोशिश की:

function deleteRow(tbodyid, rowid) 
{ 
     document.getElementById(tbodyid).removeChild(document.getElementById(rowid)); 
} 

और एक ही त्रुटि मिली।

मैं deleteRow() विधि का उपयोग नहीं कर सकता क्योंकि उसे पंक्ति की अनुक्रमणिका की आवश्यकता होती है और मैं आईडी को इंडेक्स चिह्नित करने के लिए खोजना पसंद नहीं करता हूं (भले ही मुझे अन्य समाधान नहीं मिलते ...) ।

+0

आप पंक्ति पंक्ति अनुक्रमणिका 'rowElement.rowIndex' द्वारा प्राप्त कर सकते हैं ... –

+0

क्या आप परीक्षण करने के लिए एक उदाहरण तालिका जोड़ सकते हैं, यह तालिका के तरीके के तरीके में कुछ अजीब हो सकता है। –

उत्तर

55

कैसे के बारे में:

function deleteRow(rowid) 
{ 
    var row = document.getElementById(rowid); 
    row.parentNode.removeChild(row); 
} 

और, कि अगर विफल रहता है, यह वास्तव में काम करना चाहिए:

function deleteRow(rowid) 
{ 
    var row = document.getElementById(rowid); 
    var table = row.parentNode; 
    while (table && table.tagName != 'TABLE') 
     table = table.parentNode; 
    if (!table) 
     return; 
    table.deleteRow(row.rowIndex); 
} 
+0

आपको बहुत बहुत धन्यवाद। यह वास्तव में ठीक काम करता है। – Kailas

+0

आपकी पहली पसंद मेरे लिए बहुत अच्छा काम करती है।मैंने बिना सफलता के पंक्ति इंडेक्स के साथ बेवकूफ बना दिया था, लेकिन यह उदाहरण देखना अच्छा है। –

1

और हटाने के लिए प्रयास करने के बारे में क्या है लेकिन उस पंक्ति को छुपाएं?

+0

अच्छी तरह से ... इस तथ्य को छोड़कर कि लगभग 80000 हैं और यह बहुत खराब काम करेगा ... मैं इसके अस्तित्व की जांच करता हूं, यदि यह मौजूद है तो डेटा प्राप्त करें (मैं प्रदर्शन की जांच कर सकता हूं: कोई भी नहीं, लेकिन मुझे लगता है कि यह तेज़ है अपरिभाषित जांचें)। – zozo

0

पंक्ति की मूल वस्तु आपको लगता है नहीं है, यह है कि मैं क्या से समझते हैं त्रुटि।
पहले पंक्ति के पैरेंट का पता लगाने का प्रयास करें, तो आप सुनिश्चित कर सकते हैं कि माता-पिता के getElementById भाग में क्या लिखना है।

2

इस post से, इस javascript:

function removeRow(id) { 
    var tr = document.getElementById(id); 
    if (tr) { 
    if (tr.nodeName == 'TR') { 
     var tbl = tr; // Look up the hierarchy for TABLE 
     while (tbl != document && tbl.nodeName != 'TABLE') { 
     tbl = tbl.parentNode; 
     } 

     if (tbl && tbl.nodeName == 'TABLE') { 
     while (tr.hasChildNodes()) { 
      tr.removeChild(tr.lastChild); 
     } 
     tr.parentNode.removeChild(tr); 
     } 
    } else { 
     alert('Specified document element is not a TR. id=' + id); 
    } 
    } else { 
    alert('Specified document element is not found. id=' + id); 
    } 
} 

मैं एक परीक्षण पृष्ठ में इस जावास्क्रिप्ट की कोशिश की और यह फ़ायरफ़ॉक्स में मेरे लिए काम किया।

3

Vilx- रहे हैं:

var table = row.parentNode; 
while (table && table.tagName != 'TABLE') 
    table = table.parentNode; 

और क्या हुआ अगर row.parentNodeTBODY है?

आप इसे बाहर पहले की जाँच करनी चाहिए, और कहा कि के बाद

0

कुछ त्वरित और गंदी .tBodies द्वारा while करते हैं, शायद:

<script type='text/javascript'> 
function del_tr(remtr) 
{ 
    while((remtr.nodeName.toLowerCase())!='tr') 
     remtr = remtr.parentNode; 

    remtr.parentNode.removeChild(remtr); 
} 
function del_id(id) 
{ 
     del_tr(document.getElementById(id)); 
} 
</script> 

अगर आप

<a href='' onclick='del_tr(this);return false;'>x</a> 

कहीं भी जगह के भीतर पंक्ति जिसे आप हटाना चाहते हैं, इसके बिना किसी भी आईडी के बिना काम कर रहे हैं