如何选择具有特定类的元素,然后选择具有该类和另一个类的元素

时间:2014-02-27 21:52:44

标签: jquery jquery-selectors

我有以下单选按钮:

// these should be included in sauce_flavor
<input type="radio" value="S." onclick="countPBClicks('S')" name="sauce.left" class="pb-radio-sauce default-sauce">
<input type="radio" value="S.C" onclick="countPBClicks('SF')" name="sauce.left" class="pb-radio-sauce make-table">

// this should be included in sauce
<input type="radio" value="S.reg_sauce" onclick="countPBClicks('S')" name="sauce.left" class="pb-radio-sauce ">

我有一个开关,对于只有pb-radio-sauce' class and items that have both the pb-radio-sauce class and either默认酱or 'make-table的项目,需要有两个单独的流程。

case 'sauce':
    retval = {};
    jQuery('.pb-radio-sauce:checked').each(function() {

            var elem = jQuery(this);
            retval[elem.val()] = String(elem.attr('name')).split('.')[1];
            });
    break;
case 'sauce_flavor':
    retval = {};
    jQuery('.pb-radio-sauce make-table:checked').each(function() {

            var elem = jQuery(this);
            retval[elem.val()] = String(elem.attr('name')).split('.')[1];
            });
    break;

问题是,我似乎无法想出正确的选择器来将它们分开。 ('.pb-radio-sauce:checked')找到所有结果,包括具有辅助类的结果,然后点击中断,因此它永远不会到达sauce_flavor选项。而且我不确定如何在sauce_flavor实例中包含两个可能的辅助类,同时仍然包含checked属性。

我有一个精简的fiddle(没有开关;只是已定义的函数),它显示了正在发生的事情。我定义函数的顺序无关紧要;所有选中的项目仍会被pb-radio-sauce选择器捕获。

1 个答案:

答案 0 :(得分:1)

我只会抓取所有已选中的单选按钮的集合,然后使用条件将其拆分为您的标准。

Here is a modified version of your fiddle

$(document).ready(function() {

 $( '.pb-radio-sauce:checked' ).each( function() {
    if( $(this).hasClass( 'default-sauce' ) || $(this).hasClass( 'make-table' ) ) {
         console.log( "sauce flavor" );
         console.log($(this));
    } else {
        console.log( "just sauce" );
        console.log($(this));
    }


} );
})

修改: 好的,你需要的是http://api.jquery.com/attribute-equals-selector/
Here is a different modified jsfiddle

$(document).ready(function() {

    $( '.pb-radio-sauce:checked' ).each( function() {
        if( $(this).hasClass( 'default-sauce' ) || $(this).hasClass( 'make-table' ) ) {
             console.log( "sauce flavor" );
             console.log($(this));
        }
    } );

    $( 'input[class="pb-radio-sauce"]:checked' ).each( function() {
             console.log( "just sauce" );
             console.log($(this));

    } );
})

[class =“pb-radio-sauce”]选择器只会选择只有“pb-radio-sauce”作为课程的项目。