2012-04-14 123 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>'); 
    } 
} 
?>