-2

我有一些代码循环遍历表的每一行并创建一个 json 对象。行中的元素可以是以下之一:

<input type="text" id="myelem"/>

或者

<p id="myelem">foo</p>

请注意,id两者的属性是相同的。这是因为在表格上有一个按钮Add a new Row,当单击此按钮时,另一行会通过复选框添加到表格中。当用户提交表单时,复选框消失,他们输入的值变成<p id="myelem">value they entered</p>

下面是我为此使用的代码。

    $('.input-row').each(function(index, row) {
        var innerObject = {};
        var key = $('#myelem', row).val().toUpperCase();
        jsonObject[key] = "bar";
    });

.val()由于我正在使用该功能,以上内容适用于文本框。但是,如果它包含,我如何从行中获取数据<p id="myelem">foo</p>

我的伪代码是这样的:

    $('.input-row').each(function(index, row) {
        var innerObject = {};
        /*
        if #myelem is a text box then use .val()
        if #myelem is a <p> tag then use .html()
        */
        var key = $('#myelem', row).val().toUpperCase();
        jsonObject[key] = "bar";
    });
4

6 回答 6

3

ids 在页面上应该始终是全局唯一的。如果需要引用多个元素,则应使用classes. 如果您设置myelem为 aclass而不是 anid您可以像这样引用它

$('.input-row .myelem')
于 2013-03-12T17:45:24.603 回答
1

您可以检查元素的类型

var value = null;
if($('#myid').is('input')) {
    value = $('#myid').val();
}
else if($('#myid').is('p')) {
    value = $('#myid').html();
}
于 2013-03-12T17:49:42.287 回答
0

ID 是唯一的。您不能在同一页面中使用多个 ID。如果你这样做,你应该如何决定使用哪个元素?

于 2013-03-12T17:47:40.303 回答
0

你可以使用 jQuery is() 例如if $('#myelem').is ('p'){...}

于 2013-03-12T17:51:17.727 回答
0

如果仍想坚持您的开发方式,那么以下内容可能会对您有所帮助:

$('.input-row').each(function(index, row) {
    var innerObject = {};
    var c = $('#myelem', row);
    var isInputField = c.get(0).tagName.toUpperCase()=="INPUT";
    var key =isInputField ? c.val().toUpperCase():c.html().toUpperCase();
    jsonObject[key] = "bar";
});
于 2013-03-12T17:58:39.997 回答
0

这只是为了让你开始。您.each在课堂上使用,input-row但您没有在您提供的代码中显示该类。在这个例子中,我使用了 class 而不是 id。用它来提前工作。

小提琴

于 2013-03-12T18:06:27.603 回答