如何区分jQuery中的DOM元素

时间:2013-03-12 17:43:59

标签: javascript jquery

我有一些代码循环遍历表的每一行并创建一个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";
    });

6 个答案:

答案 0 :(得分:3)

id应始终在页面上具有全局唯一性。如果需要引用多个元素,则应使用classes。如果您将myelem设置为class而不是id,那么您可以像这样引用它

$('.input-row .myelem')

答案 1 :(得分:1)

您可以检查元素的类型

var value = null;
if($('#myid').is('input')) {
    value = $('#myid').val();
}
else if($('#myid').is('p')) {
    value = $('#myid').html();
}

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

答案 4 :(得分: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";
});

答案 5 :(得分:0)

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

Fiddle