2012-04-14 10 views
0

Ich frage mich, wie ich eine CSS-Klasse zu einem Link basierend auf der ID in der Verknüpfung mit jQuery hinzufügen kann. Ich möchte die CSS-Klasse "aktiv" zu der Verknüpfung hinzufügen, wenn die if-Anweisung wahr ist. Nicht, dass ich nicht "pFavorite" aus der Klasse in Link entfernen möchte, wenn die Aussage wahr ist, ich möchte nur aktiv hinzufügen, wie dies class = "pFavorite aktiv" Ich bin nicht das in jQuery noch. Ich hoffe, dass mein Code immer noch erklärt, was ich erreichen möchte.Add CSS-Klasse basierend auf ID

<?php 
foreach($statement as $p) 
{ 
    if(array_search($p['id'], explode(",", $_COOKIE['cookie']))) 
    { 
    ?> 
    <script type="text/javascript"> 
     $("#<?php echo $p['id']; ?>", ".pFavorite").addClass("active"); 
    </script> 
    <a href="#" class="pFavorite" id="<?php echo $p['id']; ?>">IMG HERE</a> 
<?php 
    } 
} 
?> 
+3

Wenn Sie PHP zu Beginn verwenden, warum nicht den Klassennamen direkt über PHP setzen? Das Problem mit Ihrer jQuery ist, dass das Skript ausgeführt wird, bevor das Objekt gerendert wird. jQuery kann es nicht finden. Setzen Sie das SCRIPT-Tag NACH dem Anker-Tag. –

+0

Ich stimme DA zu, benutze PHP, um die aktive Klasse zu machen, damit dein Code einfacher und zentralisierter wird. Alternativ, wenn Sie wirklich jQuery benötigen, sollten Sie Ihren js-Code in '$() verschieben. Ready (function() {/ * code here * /});' – logan

+0

ist es nur ich oder darf es nicht eine ID haben, um alle numerisch zu sein? (ok ich weiß nicht, was in Ihrem $ p ['id'] ...) – Rufinus

Antwort

4

Zu allererst Ihre jQuery-Selektor ist falsch, werden Sie wahrscheinlich etwas bedeutete, ähnlich wie

$("#<?php echo $p['id']; ?>.pFavorite").addClass("active"); 

Die oben wird mit der spezifischen ID und die Klasse pFavorite, das Element entsprechen, während Ihr ursprünglicher Selektor würde alle Elemente mit der Klasse pFavorite abgleichen und dann nach dem Element mit der angegebenen ID innerhalb dieser suchen, ohne etwas zu finden (weil das Zielelement ist einer von denen, die die Klasse haben, kein Nachkomme).

Zweitens brauchen Sie keinen Klassenselektor, da Sie bereits einen ID-Selektor verwenden und IDs eindeutig sein sollen. So vereinfacht das wäre weiter zu

$("#<?php echo $p['id']; ?>").addClass("active"); 

Schließlich: Warum wollen Sie die Klasse setzen nach die Seite geladen mit jQuery, wenn Sie alle Informationen, die Sie auf der PHP-Seite benötigen? Sie können

if(array_search($p['id'], explode(",", $_COOKIE['cookie']))) { 
    // Use htmlspecialchars for all HTML output; you may need to specify 
    // additional parameters (see the function documentation) 
    printf('<a href="#" class="active pFavorite" id="%s">IMG HERE</a>', 
      htmlspecialchars($p['id'])); 
} 
+2

Als Antwort auf Ihren zweiten Teil: '# myId.myClass' und' # myId' sind * nicht * dasselbe und wählen nicht die gleichen Elemente aus. Es gibt Gründe anzugeben, dass Sie ein Element nur dann anhand der ID auswählen möchten, wenn es eine bestimmte Klasse hat. Das ist es auch nicht, was der Selektor von OP tut: Er benutzt für den Bereich des Selektors die Anweisung 2, es ist mehr wie '$ ('. PFavorite #someId')'. Der Selektor ist nicht "falsch". –

+0

@Madmartigan: Generell ja. ** In diesem speziellen Fall wissen wir, dass das Element die Klasse pFavorite haben wird, weil wir es bedingungslos setzen. Sie haben Recht damit, den Selektor zu definieren, ich habe die Parameter falsch verstanden (sah sie als einen). – Jon

+0

Das OP hat ein Komma im Selektor. Das heißt, es wählt #myID und/oder .myClass –

-1
<?php 
foreach($statement as $p) 
{ 
    if(array_search($p['id'], explode(",", $_COOKIE['cookie']))) 
    { 
    ?> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      $("#<?php echo $p['id']; ?>.pFavorite").addClass("active"); 
     }); 
    </script> 
    <a href="#" class="pFavorite" id="<?php echo $p['id']; ?>">IMG HERE</a> 
<?php 
    } 
} 
?> 
+3

Wie viele unnötige document.ready-Listener benötigen Sie? :) – Rufinus

+0

das Skript ist vor dem Inhalt zu entsprechen, so brauchen wir document.ready –

+0

ja einmal nicht zählen ($ Anweisung) mal. und übrigens. wer sagt, dass der Inhalt nicht für das a-Tag sein kann ... – Rufinus

0

einfach tun Warum nicht:

<?php 
foreach($statement as $p) { 
    if(array_search($p['id'], explode(",", $_COOKIE['cookie']))) { 
     echo('<a href="#" class="pFavorite active" id="' . $p['id'] . '">IMG HERE</a>'); 
    } 
} 
?> 

?

Verwandte Themen