2012-04-14 125 views
0

我想知道如何使用jQuery将CSS类添加到基于链接中ID的链接中。如果if语句为true,我不想将CSS类“活动”添加到链接。不是说我不想从链接的类中删除“pFavorite”,如果声明是真的,我只是想添加活动,像这样class =“pFavorite active”我还没有在jQuery中。我希望我的代码能够解释我想实现的目标。根据ID添加CSS类

<?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标签。 – 2012-04-14 23:30:19

+0

我同意DA,使用PHP来呈现活动类,使您的代码更简单,更集中。另外,如果你真的需要我们jQuery,你应该让你的js代码移动到'$()。ready(function(){/ * code here * /});' – logan 2012-04-14 23:31:38

+0

是否只是我,还是不允许有一个ID是全部数字? (好吧,我不知道你的$ p ['id']是什么......) – Rufinus 2012-04-14 23:39:55

回答

4
的所有jQuery选择是错误的

首先,你可能是指类似的东西来

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

以上将元素与特定ID 类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')'。选择器不是“错误的”。 – 2012-04-14 23:37:58

+0

@Madmartigan:一般来说,是的。 **在这个特定情况下**,我们知道元素将具有类pFavorite,因为我们无条件地设置它。你对选择器的范围是正确的,我误读了参数(把它们看作是一个参数)。 – Jon 2012-04-14 23:40:56

+0

OP在选择器中有一个逗号。这意味着它选择#myID和/或.myClass – 2012-04-14 23:41:54

-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

你需要多少不需要的document.ready监听器? :) – Rufinus 2012-04-14 23:35:01

+0

该脚本之前的内容匹配,所以我们需要document.ready – 2012-04-14 23:36:03

+0

是一次,不计算($语句)次。和btw。谁说内容不能成为标签... – Rufinus 2012-04-14 23:36:41

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