2013-03-27 25 views
0

我已经继承了一些代码,根据已选择的选项设置选择框的CSS。网页上有很多选择框,我的目标是获得具有“失败”CSS样式的选择框。jquery/javascript读取选择框css /类

我认为我已经比较接近了,但我无法为它工作。相对接近意味着我可以在JavaScript警告框中显示css类,但是当我尝试在if语句中使用该文本值时,什么都不会发生。 该代码如下。

任何指针感激地收到。

$("select").each(function() { 
    alert(this.options.item(this.options.selectedIndex).className); 
    if (this.options.item(this.options.selectedIndex).className == 'frm_ddl_notOk') { 
     alert('bunter?'); 
    } 
}); 

编辑20h后...

我是一个白痴。 我拼错了我正在寻找的课程。应该是“form_ddl_notOk”。 这明显压抑了我需要注意多久。特别是在我使用了一个提示框之后,我可以将这个类名剪切并粘贴回我的代码中(然后没有这样做!)。

当我使用正确的类名时,我用我的问题发布的不完美代码有效。

这里的一些背景,我的问题和其他问题和意见答复:

当我发现在“失败”的元素,我会寻找所谓的“意见”一个兄弟元素,并使其强制性说,“意见”变得充实。 我不能将选择基于选项文本 我必须将其基于类和/或bgcolor。 该样式应用于选择元素和选项元素。 我正在使用更普遍的选择器来试图找出东西。

感谢您的回复。不确定我是否应该将其中的任何一个标记为“答案”。如果这个Q被删除了,那么宇宙可能没有太多的不足。

+0

您想要检查select元素或类的选定选项吗? HTML的外观如何? – j08691 2013-03-27 19:25:04

+1

你有没有在你确定它们之后计划用'select'元素做些什么?为什么你不能在jQuery中使用类选择器? '$('select option.frm_ddl_notOk')。each(...);' – Danny 2013-03-27 19:26:20

回答

0

当我使用正确的类名时,我发布的代码与我的问题一起工作。

className =='form_ddl_notOk'

1

而是选择所有<select>元素,改变你的选择:

$("select.frm_ddl_notOk").each(function() { 

}); 

它使用选择(.) - http://api.jquery.com/class-selector/。它只会返回具有特定类的元素。所以在你的情况下,它会查找所有<select>元素,然后根据它们是否具有类“frm_ddl_notOk”来过滤它们。

但更具可读性是:

$("select").filter(".frm_ddl_notOk").each(function() { 

}); 

这是所有,如果你的目标与特定类<select>元素(这是你的问题,似乎有什么解释)。但在你的代码中,你似乎正在查看<option>元素(特别是选定的元素),以查看它们是否具有该类(使用jQuery的hasClass - http://api.jquery.com/hasClass/)。如果是的话,你可以尝试这样的事:

$("select").each(function() { 
    var $this = $(this); 
    if ($this.find("option").filter(":selected").hasClass('frm_ddl_notOk')) { 
     alert('bunter?'); 
    } 
}); 

这会发现<select>元素选择<option>元素,如果有你要找的类,它会提醒。

使用该:selected选择 - http://api.jquery.com/selected-selector/

所以,我想我的观点是,如果你想获得所选择的选项,使用:

$("select").find("option").filter(":selected") 

如果你想设置所选择的选项,使用:

$("select").find("option").eq(YOUR INDEX).prop("selected", true); 

http://api.jquery.com/eq/

http://api.jquery.com/prop/

最后,如果你不需要具体<select>元素进行操作,只是用这样的:

$("select").find("option").filter(":selected").filter(".frm_ddl_notOk").each(function() { 
    // The <option>s that have the "frm_ddl_notOk" class 
}); 

在这其中,找到所有<select>元素,着眼于他们的孩子<option>,仅查看选定的个人,并且只能使用“frm_ddl_notOk”类。

+0

有相同的答案 – iGanja 2013-03-27 19:27:33

+0

是否将类名附加到select元素? – adeneo 2013-03-27 19:30:53

+0

@adeneo是的,我很困惑。我一直在反复过滤什么。我不断编辑 – Ian 2013-03-27 19:31:24

0

试试这个:

$("select").each(function() { 
    if ($(this.options[this.selectedIndex]).hasClass('frm_ddl_notOk')) { 
     // do what must be done. 
    } 
}); 
0
$("select").each(function (i, ele) { 
    if ($('option:selected', ele).is('.frm_ddl_notOk')) { 
     alert('bunter?'); 
    } 
}); 
-1

你有改进的两个方面在你的代码:
1)选择可以更有效地
2)您使用的 “本” 是不正确。 使用$("select.frm_ddl_notOk option:selected")让所有选择<option>标签与"frm_ddl_notOk"类父<select>标签:如果你觉得超级懒二者必选其一$(this)或更好,但$(element)使用each()回调函数的第二个参数作为element

/*You get your <select class="frm_ddl_notOk"> element*/ 
$("select.frm_ddl_notOk").each(function(index, element) { 
    /* Get the <option> tag like this $(element).find("option:selected") */ 
    alert("Your option element is "+ $(element).find("option:selected")); 
    alert('bunter?'); 
});