2016-07-20 12 views
0

Ich möchte die zweite Klasse "rpvItem2" vom übergeordneten Element von "rtsSelected" erkennen. Ich habe verschiedene Artikel hier gelesen, konnte dieses Problem jedoch nicht beheben.Jquery .parent(). Attr(). Split ('') .pop() liefert undefined

The code works fine in my local PC html file. It is also working online but with console error.

In console: TypeError: $(...).parent(...).attr(...) is undefined

Meine jQuery:

// window load BEGINS 
$(window).load(function() { 
    var getRtsSelected = $("ul.tabset ul.rtsUL").find(".rtsSelected"); 
    var testtabsetparent = $(getRtsSelected).parent('li').attr('class').split(' ').pop(); 
    if (testtabsetparent != '') { 
     $(".tab-content .tab-box #ContentPlaceHolder1_" + testtabsetparent + " iframe").addClass("content-loaded"); 
    } 
}); 
// window load ENDS 

Mein HTML:

<ul id="navtabs" class="tabset"> 
<li> 
    <ul class="rtsUL"> 
     <li class="rtsLI rtsFirst rpvItem1"> 
      <a href="#" class="rtsLink rtsBefore">Item One</a> 
     </li> 
     <li class="rtsLI rpvItem2"> 
      <a href="#" class="rtsLink rtsSelected">Item Two</a> 
     </li> 
    </ul> 
</li> 

+3

Einfache Debugging sollte dies sortieren. Verwenden Sie einige dev-Tools und finden Sie heraus, welche Sache nicht definiert ist. Beginnen Sie mit dem Basisobjekt, dann dem Eltern, dann dem Attribut, dann dem Split-Array und schließlich dem Pop-Ergebnis. – evolutionxbox

+0

Verwenden Sie keine Klassen dafür, verwenden Sie 'data- *' Attribute. – moonwave99

+1

Wahrscheinlich wird Ihr UL-Element oder sein Inhalt dynamisch geladen (oder Klassen werden später gesetzt), nachdem das Fensterladeereignis ausgelöst wurde. Ihr Fehler bedeutet, dass Sie versuchen, 'pop()' auf 'undefined' zu setzen, da Sie 'attr()' bei leerer Menge aufrufen. –

Antwort

0

die Sie interessieren,

$(document).ready(function(){ 
     var cls = $("ul.tabset ul.rtsUL").find(".rtsSelected").parent('li').attr('class').split(' ').pop(); 
     console.log(cls); 
    }); 

kehrt

rpvItem2

+1

ABER OP verwendet Fenster laden Ereignis, so sollte es wirklich keinen Unterschied machen ... –

+0

Derzeit sieht es hilfreich "console.log (cls);" – waxil

0

$(window).load(function() { 
 
    var getRtsSelected = $("ul.tabset ul.rtsUL").find(".rtsSelected"); 
 
    var testtabsetparent = $(getRtsSelected).parent('li').attr('class').split(' ').pop(); 
 
    if (testtabsetparent != '') { 
 
     $(".tab-content .tab-box #ContentPlaceHolder1_" + testtabsetparent + " iframe").addClass("content-loaded"); 
 
    } 
 
});
<ul id="navtabs" class="tabset"> 
 
<li> 
 
    <ul class="rtsUL"> 
 
     <li class="rtsLI rtsFirst rpvItem1"> 
 
      <a href="#" class="rtsLink rtsBefore">Item One</a> 
 
     </li> 
 
     <li class="rtsLI rpvItem2"> 
 
      <a href="#" class="rtsLink rtsSelected">Item Two</a> 
 
     </li> 
 
    </ul> 
 
</li> 
 

 
<script src="https://code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script>

ich diesen Code testen und dies funktioniert. Möglicherweise verwenden Sie die alte Version jquery