2016-10-13 2 views
1

zu bekommen Ich habe eine ol li Liste dynamisch generiert, und jedes li hat eine label mit einem for Attribut.Getting # [Object Object] beim Versuch, für Attr für href

So:

<ol id="altErrorCont" class="error-container"> 
    <li> 
     <label class="error" for="dobMonth">Enter the month you were born</label> 
    </li> 
    <li> 
     <label class="error" for="dobDay">Enter the day you were born</label> 

Auf Seite zu laden möchte ich die Etiketten mit einem a Tag wickeln, die für die for-Tag in dem Etikett einen Anker enthält es umschließt. Dies ist, was ich passieren soll:

<ol id="altErrorCont" class="error-container"> 
    <li> 
     <a href="#dobMonth"> 
      <label class="error" for="dobMonth">Enter the month you were born</label> 
     </a> 
    </li> 
    <li> 
     <a href="#dobDay"> 
      <label class="error" for="dobDay">Enter the day you were born</label> 
     </a> 

Ich schrieb dieses, aber es funktioniert nicht:

var labelFor = $("ol#altErrorCont li label").each(function(){ 
    $(this).attr("for"); 
}); 

$('ol#altErrorCont li > label').wrap('<a href="#'+ labelFor +'">'); 

Es <a href="#[object Object]"> für jedes eingewickelt Label zurück. Kann mir jemand in die richtige Richtung weisen oder erklären, warum das passiert?

Vielen Dank im Voraus.

Antwort

4

jQuerys .each() Methode gibt jQuery Objekt zurück. Wenn Sie es in der Zeichenfolge-Verknüpfung verwenden, ruft JavaScript toString() Methode auf es auf. Da jQuery keine eigene toString-Methode definiert hat, ruft sie die auf Object.prototype definierte Methode auf, die [object Object] zurückgibt.

Hier ist, wie ich es gehen würde:

var labelFor = $("ol#altErrorCont li label").each(function(){ 
    $(this).wrap('<a href="#'+ $(this).attr("for") +'">'); 
}); 
+0

Works verwenden können perfekt. Vielen Dank. – bunnycode

+0

@ bunnycode, kein Problem, Sie können die Antwort akzeptieren, wenn es Ihnen geholfen hat. –

0

each bietet nur ein Mittel, über eine Reihe von Elementen laufen. Der Wert, den Sie für labelFor bekommen wäre das gleiche, als wenn Sie

tat
var labelFor = $("ol#altErrorCont li label"); 

Wenn Sie jede label in einem Link wickeln möchten, können Sie einige während der each Schleife tun können.

$("ol#altErrorCont li label").each(function() { 
    var $this = $(this); // Faster than always doing $(this) 
    var label = $this.attr('for'); 
    $this.wrap('<a href="' + label + '">'); 
}); 
0

Dies liegt daran, „jeder“ -Methode ein jQuery Objekt zurückkehren, können Sie diese verschieben: $('ol#altErrorCont li > label').wrap('<a href="#'+ labelFor +'">'); innerhalb von „jeder“ Methode wie folgt:

$(this).wrap('<a href="#'+ $(this).attr("for") +'">'); 
0

, was es tatsächlich passiert ist das ... Sie erhalten ein Array von für Attribute ........... Hier wird ein Array wie

[{},{},{}] 
^ ^^ 
these three are objects... 
zurückgegeben

, die, warum Sie Fehler sehen wie [Objekt, Objekt] und wenn Sie möchten, eine davon zugreifen Sie es wie ...

$('ol#altErrorCont li > label').wrap('<a href="#'+ labelFor[x] +'">'); 

wo x einige Index

Verwandte Themen