2013-06-21 103 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

相关问题