2017-04-07 75 views
-1

我需要一些幫助。我無法使用Jquery動態添加類。我在下面解釋我的代碼。無法在使用Jquery的標記中動態添加類

$.each(obj.cid, function() { 
     $("#ulCategory").append("<li><a href='javascript:void(0)' onclick='savesubcat("+this.id+","+this+")'>" + this.name +</li>"); 
}); 

function savesubcat(id,$this){ 
    $($this).addClass("active"); 
    $($this).siblings().removeClass('active'); 
} 

在這裏,我需要在點擊錨標記上添加活動類,但在我的方式它不像這樣發生,請幫助我。

+0

與JS代碼一起HTML。 – George

+0

首先你犯了一個語法錯誤,可能會導致錯誤 –

+0

而$($ this)是錯誤的。它應該是$這隻 –

回答

1

你的第一個問題是你沒有在函數調用中用引號包裝字符串值。第二個問題是,從上下文來看,this是一個對象。將一個對象連接到一個字符串不會像你期望的那樣工作。

要解決這個問題,使用不顯眼的委託事件處理程序會好得多。這樣你無論如何都可以在處理函數中獲得this引用,所以你不需要傳遞它。您只需將對象的id置於data屬性中,以便可以在事件處理程序中讀取它。

另請注意,this將指代沒有兄弟姐妹的a元素。要將類添加到其他a元素,您需要將DOM遍歷到父代ul,然後find()他們。試試這個:

試試這個:當你有代碼,操縱這是最好的證明說,HTML

var obj = { 
 
    cid: [{ 
 
    id: 'abc', 
 
    name: 'foo' 
 
    }, { 
 
    id: 'xyz', 
 
    name: 'bar' 
 
    }] 
 
}; 
 

 
var li = $.map(obj.cid, function(o) { 
 
    return '<li><a href="#" data-id="' + o.id + '">' + o.name + '</a></li>'; 
 
}); 
 

 
$('#ulCategory').append(li.join('')).on('click', 'a', function(e) { 
 
    e.preventDefault(); 
 
    var $a = $(this); 
 
    console.log($a.data('id')); 
 
    
 
    $a.addClass('active').closest('ul').find('a').not($a).removeClass('active'); 
 
})
.active { color: red; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul id="ulCategory"></ul>