2011-04-15 20 views
0

我有一個列表jQuery的 - 從另一個元素竊取類無hasClass()

<ul class="thisList"> 
    <li><a href="" class="iconViewport icon_import"><span>Import</span></a></li> 
    <li><a href="" class="iconViewport icon_products"><span>Artikel</span></a></</li> 
</ul> 

我想jquery-「偷」第二類的每個華里,插入一個img元素被盜類附加到它。我不能每次都使用hasClass,因爲課程不同。

人可以幫我糾正了以下內容:

var thief = $('.thisList li a').className.split(/\s+/); 
var booty = thief[1]; 
$('.thisList li a').after('<img class="someOtherClass'+booty+'" />'); 

我試圖把所有的a類到一個數組,然後偷走這個數組的第二個元素,並將其連接到插入img標籤。

還沒有工作...感謝您的幫助!

回答

3

$('.thisList li a')產量一個集合,而不是一個單一的元素,所以你需要迭代它。構建圖像時,您還缺少空間。

$('.thisList li a').each(function() { 
    var thief = this.className.split(/\s+/); 
    var booty = thief[1]; 
    $(this).after('<img class="someOtherClass ' + booty + '" />'); 
}); 
2

您必須遍歷鏈接,並分別處理它們中的每一個。否則,你無法獲得他們每個人的className財產。 $('.thisList li a').className無論如何不會工作,因爲className是DOM元素的屬性,而不是jQuery對象的屬性。

這應做到:

$('.thisList li a').each(function() { 
    var booty = this.className.split(/\s+/)[1]; 
    $(this).after('<img class="someOtherClass '+booty+'" />'); 
}); 

如果 「偷」 之類的手段刪除它,那麼你也可以撥打:

$(this).removeClass(booty); 

更新:DEMO

+0

@Felix王:我加了 「」每一個」。它得到了正確的等級(剛剛聽取了200次警報......)並將其添加到新的img元素。問題是,我看到200倍的圖像。 CSS相關或可能在jQuery中。非常感謝! – frequent 2011-04-15 17:29:49

+0

@火箭:不。我想將它從一個項目「移動」到另一個項目。 – frequent 2011-04-15 17:30:11

+0

@頻繁:不要看着我,這不是我的答案,我只是編輯它。只需將`removeClass`行添加到`each`中即可「移動」該類。 – 2011-04-15 17:32:27

1

它不工作的原因是因爲$('。thisList li a')返回一個jquery對象,它沒有屬性className。

下面是一個未經測試的嘗試

$('.thisList li a'). each(function(index, el){ 
    var class2 = el.className.split(/\s+/)[1]; 
    $(el).after('<img class="someOtherClass '+class2+'" />'); 
}) 

爲什麼地球上你的變量命名的戰利品?哇,有兩個人打敗了我!

0

測試和工作:

var classString = ''; 

$('.thisList li a').each(function(){ 
    var elements = $(this).attr('class').split(' '); 
    classString += ' ' + elements[1]; 
}); 

$('.thisList').after($('<img class="someOtherClass'+classString+'"/>')); 
相關問題