0

我继承了一些代码,这些代码根据已选择的选项设置选择框的 css。页面上有很多选择框,我的目标只是获得具有“失败”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?');
   }
});

20小时后编辑...

我是一个白痴。我拼错了我要找的课程。应该是“form_ddl_notOk”。我花了多长时间才注意到这一点,这显然令人沮丧。特别是在我使用提示框之后,我可以将类名剪切并粘贴回我的代码中(然后没有这样做!)。

当我使用正确的类名时,我在问题中发布的不完美代码起作用了。

以下是我的问题的一些背景以及对其他问题和评论的回应:

当我在“失败”中找到一个元素时,我会寻找一个名为“comments”的兄弟元素,并强制填写“comments”。我不能基于选项文本进行选择,我必须基于类和/或 bgcolor。该样式应用于 select 元素和 option 元素。我使用更通用的选择器只是为了弄清楚。

感谢您的回复。不确定我是否应该将其中任何一个标记为“答案”。如果这个 Q 被删除,宇宙可能会继续正常运行。

4

5 回答 5

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?');
    }
});

这将为每个元素找到选定 <option>的元素,如果它具有您正在查看的类,它将发出警报。 <select>

使用: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”。

于 2013-03-27T19:25:25.990 回答
0

试试这个:

$("select").each(function () {
   if ($(this.options[this.selectedIndex]).hasClass('frm_ddl_notOk')) {
      // do what must be done.
   }
});
于 2013-03-27T19:25:27.647 回答
0
$("select").each(function (i, ele) {
     if ( $('option:selected', ele).is('.frm_ddl_notOk') ) {
         alert('bunter?');
     }
});
于 2013-03-27T19:26:04.573 回答
0

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

类名 == 'form_ddl_notOk'

于 2013-03-28T17:57:48.567 回答
-1

您的代码有两个方面的改进:
1)选择器可以更高效
2)您对“this”的使用不正确。使用$(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?');
});

如果您觉得超级懒惰:$("select.frm_ddl_notOk option:selected")用于获取所有选定<option>的标签,其中"frm_ddl_notOk"包含父<select>标签中的类。

于 2013-03-27T19:48:32.987 回答