2014-02-27 50 views
-1

元件我有以下单选按钮:如何选择具有特定类的元素,然后选择具有类和另一

// 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选择器捕获。

+0

什么是String(),这是不需要的。你想有':not(.otherClass)'? – epascarello

+0

这是我继承的旧代码,必须添加新功能。我离开了String(),因为代码库是一个噩梦,我宁愿不开始搞乱当前正在工作的位。至于':not',否 - 为了工作,你必须具体说明你不想要的类。还有很多其他的课程可以与'pb-radio-sauce'结合使用,我不能将它们全部包含在':not'中。我需要一种方法来积极地指定要找到哪些类,而不是负面地指出哪些类找不到。 – EmmyS

+0

所以你想要一个或?找到X或Y? '$(“[type = radio]:checked”)。filter(“。x,.y”)...' – epascarello

回答

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-无线电酱油”]选择将选择只有“pb-radio-sauce”作为课程的项目。

+0

你的更清洁。 – RossG

+0

正如我在对原文的评论中所说的,还有很多其他类可以与'pb-radio-sauce'结合使用,并且使用'if-else'会因为'else'发生而炸毁找到所有包含任何其他类的东西,我不想要。我需要这个非常具体 - 找到只有'pb-radio-sauce'和'default-sauce'或'make-table'的无线电 - 你的解决方案将允许'else'找到具有'pb-例如,收音机酱汁限制酱。 – EmmyS

+0

由于她的pb-radio-sauce中有空白,你最新的编辑可能不起作用。这是另一种选择。不('alltheothersauces,andandotherauce') – RossG

相关问题