【问题标题】:jQuery:How to select elements with particular class here?jQuery:如何在这里选择具有特定类的元素?
【发布时间】:2013-06-21 16:27:59
【问题描述】:

HTML 是这样的:

<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的所有元素

【问题讨论】:

  • 您希望仅针对一个特定整数(这很容易),还是针对每个可能的整数?
  • 不,我想选择所有具有 position+someIntegers 的类
  • @JanDvorak 每个可能的整数。

标签: jquery


【解决方案1】:

我假设您想要更改 所有 具有与该模式匹配的类的元素的背景 - 而不仅仅是一个特定的数字。

可能有一种 hacky 方法可以做到这一点,将class 视为另一个属性并针对该值进行部分匹配。

但是,更好的解决方案是添加另一个您可以选择的类。也许有什么正在添加positionX 类的同时也添加了一个positioned 类。

【讨论】:

  • 另外:如果你使用positioned类,你可以简单地使用css样式表来设置背景颜色。
【解决方案2】:

试试这个:

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

Working Fiddle

您只需修改正则表达式即可获得完美的结果:)

【讨论】:

  • 我还建议添加一个类而不是直接设置背景颜色。
  • position12 怎么样? position1A呢?
  • @JanDvorak 我刚刚向 OP 提出了想法。他/她可以更新正则表达式以获得完美的结果。我在帖子中提到了这一点。 :)
  • @Mr_Green hack 使用错误的工具(正则表达式,而不是添加类)
  • @Mr_Green 这可能是回答书面问题的最佳方式——但它仍然将class 视为一个属性并对其进行文本匹配,而不是按预期使用类。
【解决方案3】:
$(".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/

【讨论】:

  • 有点老套,但死板:-)
  • +1 表示“如果你必须这样做”。与下面弹出的大多数 hacky 解决方案不同,这个应该确实有效。
  • 我还建议添加一个类而不是直接设置背景颜色。
【解决方案4】:

试试下面的选择器:

$("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 implementationJames Padolsey 提供。

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

【讨论】:

  • 我在 jQuery 文档中看不到任何 :regex 选择器。您链接的那个答案是指在使用之前需要包含的特定插件:james.padolsey.com/javascript/regex-selector-for-jquery
  • 您需要包含regex 选择器的定义。查看我编辑的代码。
  • 我对这个自定义正则表达式选择器知之甚少,无法权威地发表评论,但我怀疑这并不像所写的那样工作。如果您要匹配 class 属性,为什么会有 .?你如何防止选择positioning 类?如果position 是属性值中的第一个类,会发生什么?如果不是第一个呢?
  • 看到插件使用了真正的正则表达式:不,那个正则表达式不正确。
【解决方案5】:

你也可以试试这个:

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

【讨论】:

  • hasClass over a set 并没有按照你的想法做,$(this) 也不是你想的那样使用它。
【解决方案6】:
$(".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');

【讨论】:

  • someINTEGER 是什么?
  • @NavneetSaini 我以为你有一个?
  • 你想放在那里的整数,比如 $(".position" + 1)
【解决方案7】:

试试这个

它正在工作

    $('[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.

参考

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

【讨论】:

  • 这也将与 positionednotpositionedneedsposition 类匹配。
  • 尝试任何人作为您解决此问题的要求。
  • 问题是当它们被动态添加/删除时,不能保证类将在属性值中显示的顺序。除此之外,您根本不检查数字——这些类后面可以跟任何东西,它们仍然会被选中。
  • 还是错了。选项#1 太具体了(你不能交换类,在开头添加一个新的......)而且它也匹配 positioned 等。 #2 匹配 positionedunpositionable 等。 #3 如果 positionX 类是第一个则中断,并且它也匹配 positioned
  • 但是@Navneet Saini 根据您的问题,此解决方案之一可以解决它
【解决方案8】:

如果您知道 SomeINTEGER 的值,请使用:

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

else // 这建议从“位置”开始

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

【讨论】:

  • 您的第一个解决方案实际上并没有回答问题 - 他们知道整数。第二种解决方案假定位置类是元素具有的第一个类 - 不能保证。
猜你喜欢
  • 2018-05-19
  • 1970-01-01
  • 2011-03-02
  • 1970-01-01
  • 2017-09-13
  • 1970-01-01
  • 2012-12-05
  • 2023-03-04
相关资源
最近更新 更多