jQuery循环给出所有<select>选项而不是选项:selected </select>

时间:2013-08-04 21:24:46

标签: javascript jquery

我需要循环一个表并从中获取值,然后将它们存储在一个数组中。现在这个循环给了我所有的值,但是遇到HTML&lt;选择&GT;元素它返回选定的选项然后它给了我所有的选择选项。我只想要所选的选项,整个列表。

通过向您展示,这更容易解释。这是fiddle,这里是jQuery代码

var saveEdits = [];
$('#save').click(function () {
    $('.projects_editable_tbody tr').each(function () {
        $('.projects_editable_content_td, option:selected', this).each(function () {
            var $input = $("input", this);
            if ($input.length) {
                saveEdits.push($input.val());
            } else saveEdits.push($(this).text());
        });
    });
    $.each(saveEdits, function (index, value) {        
        console.log(index + ': ' + value);
    });
});

正如你从小提琴中看到的那样,数组几乎就像我想要的那样填充几乎。任何帮助表示赞赏。如果您需要更多信息/代码,请告诉我。

2 个答案:

答案 0 :(得分:3)

它为你提供了包含select的td中的文本,因为你已经指定了.projects_editable_content_td。您需要排除包含select的.projects_editable_content_td。请参阅我昨天发给您问题的代码。

答案 1 :(得分:1)

也许我误解了这个问题,但我修改了你的代码来推送每个选择的当前选定值,而不是选择本身。我还编辑了选择框的内容以使用“选定”道具。

    $('.projects_editable_content_td', this).each(function () {
            if(jQuery(this).children().val()) {
                  saveEdits.push($(this).children().val());
            } else {
                 saveEdits.push(jQuery.trim($(this).text()) );
            }
    });

你可以在这个jsfiddle中看到

http://jsfiddle.net/amenadiel/WNSBk/29/

编辑第一行并返回正确的数组。第二个原样保持不变,仍有问题。

在您的场景中,如果将每行包含在标记中并使用表单的serialize()方法收集数据可能会更好。为此,您需要将每个字段作为输入。例如,您可以在文本元素旁边放置一个隐藏字段。