2013-06-21 133 views
3

HTML是這樣的:jQuery:如何在這裏選擇具有特定類的元素?

<span class="someClass position1" >span1</span> 
<span class="someClass" >span2</span> 
<span class="someClass" >span3</span> 
<span class="someClass position2" >span4</span> 
<span class="someClass" >span5</span> 
<span class="someClass position4" >span6</span> 
<span class="someClass position10" >span7</span> 
<span class="someClass" >span8</span> 
<span class="someClass position12" >span9</span> 

現在,使用jQuery,我將如何改變只具有類position + SomeINTEGER這些元素的backgroundColor

我想選擇所有的類poistion元素+ TheRespectiveInteger

+0

你想,對於一個特定的整隻(這將是容易),或每個可能的整數? –

+0

不,我想選擇所有那些有位置+ someIntegers –

+0

@JanDvorak每個可能的整數的類。 –

回答

-1
var n =10;  
$(".someClass position"+n).css("background-color","#b0c4de"); 
+2

缺少''',你沒有選擇不存在的'someClass'和'positionN'元素。 – luiges90

+0

那是什麼'NUMBER'? –

+0

請參閱編輯。 –

0
$(".position" + someINTEGER).css('backgroundColor','your color'); 

編輯

你問的問題的方式是相當混亂。

鑑定具有階級立場,+整數的元素,你需要指定另一個類,以他們爲識別

<span class="someClass integerclass position1" >span1</span> 
<span class="someClass integerclass position2" >span4</span> 

$(".integerclass).css('backgroundColor','your color'); 
+0

什麼是'someINTEGER'? –

+2

@NavneetSaini我以爲你有一個? –

+0

你想放在那裏的整數,像$(「。position」+1) –

6

我假設你想改變的所有元素的背景下,有一個匹配該模式的類 - 不僅僅是一個特定的數字。

有可能是通過治療class只是另一種屬性,做對的值部分匹配做這個哈克方式。

但是,更好的解決方案是添加另一個可以選擇的類。也許有什麼是增加positionX類也同時增加一個positioned類。

+3

作爲一個額外的:如果你使用'定位'類,你可以簡單地使用CSS樣式表來設置背景顏色。 – LeGEC

1

請嘗試以下選擇:

$("span:regex(class, (\s|^)position[0-9]+(\s|$))").css("background-color", "Green"); 

更多參考,請參閱Write a jquery selector to select a class with a certain pattern

對於regex選擇,你需要編寫的代碼下面一行:

jQuery.expr[':'].regex = function(elem, index, match) { 
    var matchParams = match[3].split(','), 
    validLabels = /^(data|css):/, 
    attr = { 
     method: matchParams[0].match(validLabels) ? 
        matchParams[0].split(':')[0] : 'attr', 
     property: matchParams.shift().replace(validLabels,'') 
    }, 
    regexFlags = 'ig', 
    regex = new RegExp(matchParams.join('').replace(/^\s+|\s+$/g,''), regexFlags); 
    return regex.test(jQuery(elem)[attr.method](attr.property)); 
} 

wonderfull implementation給出James Padolsey

看到工作示例:http://jsfiddle.net/Q7fTW/16/

+2

我在jQuery文檔中看不到任何':regex'選擇器。您鏈接的答案指的是在使用此特定插件之前需要包含的插件:http://james.padolsey.com/javascript/regex-selector-for-jquery/ –

+0

您需要包含'regex'的定義選擇。看到我編輯的代碼。 –

+1

我不知道這個自定義正則表達式選擇器評論權威,但我懷疑這不工作如書面。爲什麼你有'.'如果你匹配類屬性?你如何防止選擇「定位」類?如果'position'是屬性值中的第一個類會發生什麼?如果它不是第一個呢? – jcsanyi

0

你也可以試試這個:

<script type="text/javascript"> 
    $(function(){ 
     if($(".someClass").hasClass(".position"+NUMBER)){ 
      $(this).css({ 'backgroundColor','your color' }); 
     } 
    }); 
</script> 
+1

'hasClass'超過一套不會做你的想法,'$(this)'不是你認爲你在哪裏使用它。 –

-2

如果你知道SomeINTEGER的值,然後使用:

$(".position" + SomeINTEGER).css('backgroundColor','red'); 

其他//這表明從開始「position」

$('span[class^=position]).css('backgroundColor','red'); 
+0

您的第一個解決方案實際上並沒有回答這個問題 - 他們**不知道整數。第二種解決方案假定位置類是元素的第一個類 - 這不能得到保證。 – jcsanyi

2
$(".someClass").each(function(){ 
    var classes = $(this).attr('class').split(/\s+/); 
    for (var i = 0; i < classes.length; ++i) 
    { 
     if (classes[i].match(/^position\d+$/i)) { 
      $(this).css('background-color', 'red'); 
     } 
    } 
}); 

對於任何包含一個類的元素是positionN其中N是任何整數以及someClass類,如果您必須這樣做。

http://jsfiddle.net/ysUMs/2/

+0

有點hacky,但剛性:-) –

+0

+1「如果你必須這樣做」。與大多數下面彈出的hacky解決方案不同,這個應該真的有效。 – jcsanyi

+2

我也建議添加一個類,而不是直接設置背景顏色。 – jcsanyi

4

試試這個:

$('.someClass').filter(function() { 
    return /(\s|^)position[0-9]+(\s|$)/.test(this.className); 
}).css('background-color', 'silver'); 

Working Fiddle

你可以只修改正則表達式來獲得完美的結果:)

+0

我也建議添加一個類,而不是直接設置背景顏色。 – jcsanyi

+0

'position12'呢?那麼'position1A'呢? –

+0

@jcsanyi看起來不錯。 –

0

試試這個

它的工作

$('[class^="someClass position"]').css({ 'background-color': 'red' }) 
    //Selects elements that have the specified attribute with a value beginning exactly with a given string. 

$('[class*="position"]').css({ 'background-color': 'red' }) 
    //Selects elements that have the specified attribute with a value containing the a given substring. 

$('[class^="someClass"][class*=" position"]').css({ 'background-color': 'red' }) 
    //Matches elements that match all of the specified attribute filters. 

refrence

http://api.jquery.com/category/selectors/attribute-selectors/

+1

這也將匹配任何與'定位'或'notpositioned'或'needsposition'類。 – jcsanyi

+0

嘗試解決這個問題的任何人作爲您的要求。 –

+0

問題在於,無法保證在動態添加/刪除類時,類將顯示在屬性值中的順序。除此之外,你並沒有檢查數字 - 這些類可以跟隨任何東西,他們仍然會被選中。 – jcsanyi

相關問題