2013-05-20 36 views
0

我希望能够遍历并记录下选择下拉框中可用的每个选项。我不确定在使用$(this)时如何执行此操作。

这就是我所拥有的。

$('select').each(function(){ 
    $(this).find('options').each(function(){ 
     var boxOpt = $(this).text(); 
     console.log(boxOpt); 
    }); 
}); 

它当前不输出任何内容。我希望能够做到这样的事情: $(this + ' options').each(function(){...});但这是行不通的。

我试过 $(this).find(),$(this).children()和其他一些变化,但我不知道现在该做什么。

有什么建议吗? 谢谢

+1

用于在HTML中选择有效的儿童是“选项”,而不是“选项” –

+0

谢谢。这解决了它 – ntgCleaner

回答

4

options应该是option。您只需将它添加到选择的字符串:

$('select option').each(function(){ 
    var boxOpt = $(this).text(); 

    console.log(boxOpt); 
}); 
+1

为了优化目的,这应该是'select>选项,选择> optgroup>选项'。但如果你对优化感兴趣,你将不会使用jQuery,所以LOL –

+0

Aaahh谢谢你!那让我疯狂。不幸的是,我必须在每条语句中使用每条语句,所以这里的答案是半正确的。我将'options'改为'option',它可以和.find()一起使用。再次感谢您 – ntgCleaner

+0

@ntgCleaner:您为什么需要使用嵌套的'each'? – Blender

2

这里是如何做到这一点的Vanilla JS

var tags = document.getElementsByTagName('select'), l = tags.length, i, opts, m, j; 
for(i=0; i<l; i++) { 
    opts = tags[i].options; 
    m = opts.length; 
    for(j=0; j<m; j++) { 
     console.log(opts[j].text); 
    } 
} 
+0

我很欣赏答案,尽管您会讨厌只在需要时才使用VJS的事实。如for循环时,每个不会削减它和基本的JavaScript像子字符串和替换,等等。正如你在上面的评论中说,我不会去优化,但我很高兴你在这里回答这个,所以我可以来回来,做得更好! – ntgCleaner