2012-04-14 2 views
0

Интересно, как я могу добавить класс CSS к ссылке на основе ID в ссылке с помощью jQuery. Я бы не добавил класс CSS «active» к ссылке, если if-statement является true. Не то, чтобы я не хотел удалять «pFavorite» из класса в ссылке, если утверждение истинно, я просто хочу добавить активный, вот так: class = "pFavorite active" Я не так в jQuery. Надеюсь, мой код все еще объясняет, чего я хочу достичь.Добавить класс CSS на основе 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

Если вы используете PHP для начала, почему бы не задать имя класса напрямую через PHP? Проблема с вашим jQuery заключается в том, что у вас есть скрипт, выполняемый до того, как объект будет даже отображаться. jQuery не может найти его. Поместите метку SCRIPT ПОСЛЕ тега привязки. –

+0

Я согласен с DA, используя PHP для рендеринга активного класса, делает ваш код более простым и централизованным. Кроме того, если вам действительно нужно jQuery, вы должны сделать свой код js в '$(). Ready (function() {/ * code here * /});' – logan

+0

это только я, или не разрешено иметь идентификатор, который должен быть числовым? (хорошо, я не знаю, что у вас в $ p ['id'] ...) – Rufinus

ответ

4

Прежде всего ваш селектор JQuery неправильно, вы, вероятно, имел в виду что-то похожее на

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

выше будет соответствовать элементу с определенным идентификатором и класс pFavorite, в то время как ваш исходный селектор будет соответствовать всем элементам класса pFavorite, а затем найдите элемент с указанным id внутри любого из них, не найдя ничего (потому что целевой элемент - один из тех, у кого есть класс, а не потомок).

Во-вторых, вам не нужен селектор классов, поскольку вы уже используете селектор id, и идентификаторы должны быть уникальными. Так что будет дополнительно упрощена до

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

Наконец: почему вы хотите установить класс после загрузки страницы с JQuery, когда у вас есть вся информация, необходимая на стороне PHP? Вы можете просто сделать

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

В ответ на вашу вторую часть: '# myId.myClass' и' # myId' - * не * то же самое и не выбирают одни и те же элементы. Есть причины указать, что вы хотите выбрать элемент по id, только если он имеет определенный класс. Кроме того, это не то, что делает селектор OP: он использует предел 2 для сферы действия селектора, он больше похож на '$ ('.pFavorite #someId')'. Селектор не является «неправильным». –

+0

@ Мадмартиган: Вообще-то, да. ** В этом конкретном случае ** мы знаем, что элемент будет иметь класс pFavorite, потому что мы безоговорочно его устанавливаем. Вы правы в отношении выбора селектора, я неправильно читаю параметры (видел их как один). – Jon

+0

OP имеет запятую в селекторе. Это означает, что он выбирает #myID и/или .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

сколько ненужных документов вам нужно? :) – Rufinus

+0

сценарий перед содержимым, чтобы соответствовать, поэтому нам нужен document.ready –

+0

да один раз, а не count ($ statement) раз. и кстати. который говорит, что контент не может быть для тега ... – Rufinus

0

Почему нет:

<?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>'); 
    } 
} 
?> 

?