我有一些代码循环遍历表的每一行并创建一个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";
});
答案 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。用它来提前工作。