2016-04-27 4 views
3

kann jemand erklären, warum dieser Code tut ist Arbeitrichtiger Weg, um jquery attr Variablen zu definieren?

$(document).ready(function() { 
$('a').each(function() { 
    var linkhref = $('a').attr('href'); 
    if (linkhref == '/second2.php'){ 
    $(this).css('color','red'); 
    } 
    }); 
    }); 

und wenn ich

var linkhref = $(this).attr('href'); 

es läuft auf

dritte Zeile ändern. Sind diese beiden Var-Strings nicht gleich?

Antwort

1

Im Kontext der Schleife müssen Sie den Verweis auf das aktuelle Element des Arrays unter Iteration beibehalten, da Sie jedes Element des Arrays aktualisieren möchten.

Wenn Sie $('a').attr('href'); verwenden, wird diese Linie andere suchen (zum Zeitpunkt der Ausführung) aufzurufen für a Elemente in der Seite und kehren Sie die href Attribut des ersten Ankerelement auf der Seite gefunden. Dadurch verlieren Sie den Bezug auf die Array-Variable unter Iteration.

Aus dem gleichen Grund funktioniert die Verwendung $(this).css('color', 'red'); funktioniert gut.

+0

das macht Sinn, danke –

1

Wenn Sie den Wähler

var $a = $('a'); 

$a verwenden wird ein Array aller a DOM-Elemente sein.

Sie könnten tun:

var $a = $('a'); 
$.each($a, function(indexOfArray, element) { 
    if (element.href == '/second2.php') { 
    $(element).css('color','red'); 
    } 
}); 

https://api.jquery.com/each/

Oder:

$(document).ready(function() { 
$('a').each(function() { 
    var $a = $(this); 
    if ($a.attr('href') == '/second2.php') { 
    $a.css('color', 'red'); 
    } 
}); 
}); 

Sie möchten die Zeiten Sie einen Selektor verwenden minimieren, so zu $a zuweisen.