Javascript 在jquery中,从同一对象的属性设置输入字段和标签的正确方法是什么?
我有一个对象,它有很多属性。有些属性将显示在输入元素中,有些属性将显示在标签中 因此,我的代码如下所示:Javascript 在jquery中,从同一对象的属性设置输入字段和标签的正确方法是什么?,javascript,jquery,Javascript,Jquery,我有一个对象,它有很多属性。有些属性将显示在输入元素中,有些属性将显示在标签中 因此,我的代码如下所示: var data = getMyData(); var propNames = Object.keys(data); var i, propName, elem; for (i = 0; i < propNames.length; ++i) { propName = propNames[i]; elem = $("#" + propName);
var data = getMyData();
var propNames = Object.keys(data);
var i, propName, elem;
for (i = 0; i < propNames.length; ++i) {
propName = propNames[i];
elem = $("#" + propName);
if (elem.is('input')) {
elem.val(data[propName]);
} else {
elem.html(data[propName]);
}
}
var data=getMyData();
var propNames=Object.keys(数据);
变量i,propName,elem;
对于(i=0;i
在jquery中这样做正确吗?因为它看起来有点难看
谢谢。我认为可以用jQuery.each()函数重写for循环,它可以迭代任何数组或对象。它接受一个回调函数,该函数被赋予索引(或键)和每个项的值 在您的示例中,它类似于:
jQuery.each(data, function(key, value) {
elem = jQuery("#" + value);
if (elem.is('input')) {...
查看文档中的假设您正在尝试填写一个
输入
或一个文本区域
,您应该能够将其替换为:
var data = getMyData();
var propNames = Object.keys(data);
for (i = 0; i < propNames.length; ++i) {
$("input#"+propNames[i]).val(data[propNames[i]);
$("textarea#"+propNames[i]).html(data[propNames[i]);
}
由于
input
元素没有innerHTML
和textarea
元素没有val
,因此应该按原样工作。有点粗俗,但很简洁。我觉得一切都很好,马克。我强烈建议不要使用新的对象原型方法,比如Object.keys
,它只在IE9+和其他更新的浏览器中可用。取而代之的是在所有JS之前为它创建原型(我实际上不喜欢这样做),或者使用一个复制的全局函数/命名空间方法来处理它,就像底部的function getkeys()
我不明白这看起来有多难看,但我不明白为什么需要
对象。键。。。您可以在
中为…使用常规的:
var data = getMyData(),
d, $el;
for (d in data) {
$el = $('#'+ d);
if ($el.is('input')) {
$el.val(data[d]);
} else {
$el.html(data[d]);
}
}
我发现将方法名存储在变量(text
/val
)中更容易,这样我们就不会有太多的代码重复(代码中的条件会导致不必要的重复)
另外,由于您无论如何都在使用jQuery,所以您最好使用。它将所有内容简化为:
$.each(getMyData(), function (key, val)
{
var el = $("#" + key),
method = el.is('input') ? 'val' : 'text';
el[method](val);
});
这是小提琴:
如果不喜欢将方法名称存储在变量中,请改用以下方法:
$.each(getMyData(), function (key, val)
{
var el = $("#" + key);
el.is('input') ? el.val(val) : el.text(val);
});
这是小提琴:
如果您担心,您可以自己运行检查:
var data = getMyData();
$.each(data, function (key, val)
{
if ( ! data.hasOwnProperty(key) ) return;
var el = $("#" + key);
el.is('input') ? el.val(val) : el.text(val);
});
问题是:这不是应该贴上去吗?我不知道。如果你能把它移到那里,我会同意的。不幸的是,$。在调用给定的回调之前,每个
都不会调用属性名上的对象。hasOwnProperty
。另一方面,我想使用类似于forEach的东西。有更安全的选择吗?@mark-您可以运行hasOwnProperty
检查您自己。请参阅我答案的更新。
$.each(getMyData(), function (key, val)
{
var el = $("#" + key),
method = el.is('input') ? 'val' : 'text';
el[method](val);
});
$.each(getMyData(), function (key, val)
{
var el = $("#" + key);
el.is('input') ? el.val(val) : el.text(val);
});
var data = getMyData();
$.each(data, function (key, val)
{
if ( ! data.hasOwnProperty(key) ) return;
var el = $("#" + key);
el.is('input') ? el.val(val) : el.text(val);
});