2016-08-10 14 views
5

Próbuję przetestować, czy atrybut HTML jest obecny i uzyskać wartość przy użyciu atrybutu Atrybut ("tabindex"). Ale otrzymuję poniżej błąd:Sprawdź, czy atrybut HTML jest obecny i uzyskaj wartość

Unable to get property 'hasAttribute' of undefined or null reference

Używam jGrid i jQuery. Jeśli atrybut jest obecny, próbuję uzyskać wartość tego konkretnego td.

Proszę zapoznać się z poniższym kodzie:

<tr class="jqgrow ui-row-ltr ui-widget-content myAltRowClassEven ui-state-highlight" tabindex="0" id="2" role="row" aria-selected="true"> 
    <td aria-describedby="jqGrid11_cname" title=" TESTTHIS" class="zeroBorderRight" style="text-align: left; height: 20px;" role="gridcell"> 
     TESTTHIS 
    </td> 
</tr> 
+1

W jaki sposób wybierasz element html? 'Nie można uzyskać xxx undefined' prowadzi do mnie, że może być problem z twoim odniesieniem do elementu – Hodrobond

+0

Czy mógłbyś opublikować kod swojego testu? Łatwiej byłoby powiedzieć Ci, co jest błędem, jeśli możemy zobaczyć kod. –

+1

Dołączasz "jqgrid" jako tag twojego pytania. Byłoby pomocne, gdybyś sformułował problem jaśniej: gdzie (w którym callbacku) musisz przetestować istnienie jakiegoś atrybutu. Włączenie kodu JavaScript może usunąć wiele rzeczy. – Oleg

Odpowiedz

2

użyć jQuery has attribute selector do filterout elementu z atrybutem tabindex.

var text = $('td[tabindex]').text(); 
//--------------^^^^^^^^^^-------------------- 
+0

Witam @Pranav. Wielkie dzięki za twoją sugestię. Ale problem polega na tym, że tabela jest w pętli i ma dużo td z tabindex. Przepraszam, zapomniałem wspomnieć, że jest w pętli. – user3213490

+0

@ user3213490 '[tabindex]' pomoże odfiltrować .... na przykład: '$ ('. Yourclass [tabindex]')' –

3

Spróbuj tego:

$("#item").attr("tabindex") 
+0

To się udało. Wielkie dzięki dla wszystkich za twoje rozwiązania. – user3213490

0

rozwiązanie bez jQuery, ES6

var hasAttr = [...document.getElementById('#blah').attributes] 
    .map(a => a.name) 
    .indexOf(ATTRIBUTE) > -1; 
1

Jeśli chcesz uzyskać wartości TabIndex atrybut można zrobić:

$(function() { 
 
    $('table tbody tr[tabindex]').each(function (i, e) { 
 
    var tabindex = e.getAttribute('tabindex'); 
 
    console.log('tabindex=' + tabindex + ' Row text: ' + e.textContent); 
 
    }); 
 
});
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script> 
 

 
<table> 
 
    <tbody> 
 
    <tr class="jqgrow ui-row-ltr ui-widget-content myAltRowClassEven ui-state-highlight" id="1" role="row" 
 
     aria-selected="true"> 
 
     <td aria-describedby="jqGrid11_cname" title=" TESTTHIS" class="zeroBorderRight" 
 
      style="text-align: left; height: 20px;" role="gridcell"> TESTTHIS 
 
     </td> 
 
    </tr> 
 
    <tr class="jqgrow ui-row-ltr ui-widget-content myAltRowClassEven ui-state-highlight" tabindex="0" id="2" role="row" 
 
     aria-selected="true"> 
 
     <td aria-describedby="jqGrid11_cname" title=" TESTTHIS" class="zeroBorderRight" 
 
      style="text-align: left; height: 20px;" role="gridcell"> TESTTHIS 
 
     </td> 
 
    </tr> 
 
    <tr class="jqgrow ui-row-ltr ui-widget-content myAltRowClassEven ui-state-highlight" tabindex="2" id="3" role="row" 
 
     aria-selected="true"> 
 
     <td aria-describedby="jqGrid11_cname" title=" TESTTHIS" class="zeroBorderRight" 
 
      style="text-align: left; height: 20px;" role="gridcell"> TESTTHIS 
 
     </td> 
 
    </tr> 
 
    </tbody> 
 
</table>

Powiązane problemy