我想说我想用DOM创建一个输入元素。而不是做这样的事情
var input = document.createElement("input");
input.setAttribute("class", "my-class");
input.setAttribute("type", "checkbox");
input.setAttribute("checked", "checked");
是否有一种DRYer方法将这三行代码写入一行。
我知道你可以做这样的事情
var attributes = ["class", "type", "checked"];
var values = ["my-class", "checkbox", "checked"];
for (var i = 0; i < attributes.length; i++) {
input.setAttribute(attributes[i], values[i])
end
问题是只有在您需要添加大量属性时才有用。如果你只有两个或三个,那就更少了。
无论如何我可以干掉这段代码吗?
答案 0 :(得分:7)
答案 1 :(得分:5)
在jQuery中你可以这样做:
var $input = $("<input>", {class: "my-class", type: "checkbox", checked:"checked"});
答案 2 :(得分:3)
是的,您可以使用Jquery。
$(input).attr(
{
"data-test-1": num1,
"data-test-2": num2
});
答案 3 :(得分:2)
var input = document.createElement("input");
function setAttributes(el, options) {
Object.keys(options).forEach(function(attr) {
el.setAttribute(attr, options[attr]);
})
}
setAttributes(input, {"class": "my-class", "type": "checkbox", "checked": "checked"});
console.log(input);
答案 4 :(得分:1)
Element.setAttribute
设置了一个属性,但您可以轻松编写辅助函数:
function setAttributes(elements, attributes) {
Object.keys(attributes).forEach(function(name) {
element.setAttribute(name, attributes[name]);
})
}
用法:
var input = document.createElement("input");
setAttributes(input, {
class: "my-class",
type: "checkbox",
checked: "checked"
})
正如其他答案所说,您也可以使用$.attr
。如果你的项目已经使用了jQuery,那就太棒了。如果它没有,我会使用这个功能而不是为一个简单的任务添加一个相当重量级的依赖。
答案 5 :(得分:0)
一种没有框架或库的优雅方法是使用:
Object.assign(element, attributes);
其中第二个参数 attributes
是一个对象字面量,其中:
keys
代表属性属性values
代表属性值。这意味着:
var input = document.createElement("input");
input.setAttribute("class", "my-class");
input.setAttribute("type", "checkbox");
input.setAttribute("checked", "checked");
可以写成:
const input = document.createElement("input");
Object.assign(input, {class: 'my-class', type: 'checkbox', checked: 'checked'});