2013-03-27 45 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?'); 
});