为什么这种在将按钮附加到 DOM 之后在 jquery 上动态创建按钮的方式会创建对象?
Why does this way of creating dynamically a button on jquery after appending it to DOM creates objects?
我不明白为什么代码的 1º 选项有效,而 2º 却不行!?使用字符串创建按钮元素工作正常,但使用 jquery 选择器的 2º 参数创建按钮元素 + 它的属性不起作用。它只是创建对象并将其附加到 DOM
<script>
var arr = [];
for(var i = 1; i <= 1000; i++){
// 1º option to create button elem
var boton = '<button type="button" class="btn btn-
primary">'+i+'</button>';
// 2º option to create button elem
var boton = $('<button>', {
'text': i,
'id': 'btn_' + i,
'class': 'btn btn-danger'
})
arr.push(boton);
}
$(function(){
$('button').after(arr.join(''));
});
</script>
<button type="button" class="btn btn-primary">
Imprimir en consola 'Hola Mundo'
</button>
第一种方法有效,因为您创建了一个包含有效 HTML 的字符串。
第二个示例尝试从 jQuery 对象创建字符串。这不会像您预期的那样工作,因为它隐式调用对象上的 toString()
,结果是 "[Object object]"
,而不是 HTML。
请注意,如果删除 join()
调用并附加数组本身,则可以使用 jQuery 对象的后一种方法:
var arr = [];
for (var i = 1; i <= 1000; i++) {
var boton = $('<button>', {
'text': i,
'id': 'btn_' + i,
'class': 'btn btn-danger'
})
arr.push(boton);
}
$(function() {
$('button').after(arr);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button type="button" class="btn btn-primary">Imprimir</button>
我还建议不要在动态内容上创建增量 id
属性,因为它通常会使代码变得比需要的更复杂。使用通用的 类 以及 DOM 遍历方法和数据属性。然而,最好的方法将完全取决于您的具体用例。
我不明白为什么代码的 1º 选项有效,而 2º 却不行!?使用字符串创建按钮元素工作正常,但使用 jquery 选择器的 2º 参数创建按钮元素 + 它的属性不起作用。它只是创建对象并将其附加到 DOM
<script>
var arr = [];
for(var i = 1; i <= 1000; i++){
// 1º option to create button elem
var boton = '<button type="button" class="btn btn-
primary">'+i+'</button>';
// 2º option to create button elem
var boton = $('<button>', {
'text': i,
'id': 'btn_' + i,
'class': 'btn btn-danger'
})
arr.push(boton);
}
$(function(){
$('button').after(arr.join(''));
});
</script>
<button type="button" class="btn btn-primary">
Imprimir en consola 'Hola Mundo'
</button>
第一种方法有效,因为您创建了一个包含有效 HTML 的字符串。
第二个示例尝试从 jQuery 对象创建字符串。这不会像您预期的那样工作,因为它隐式调用对象上的 toString()
,结果是 "[Object object]"
,而不是 HTML。
请注意,如果删除 join()
调用并附加数组本身,则可以使用 jQuery 对象的后一种方法:
var arr = [];
for (var i = 1; i <= 1000; i++) {
var boton = $('<button>', {
'text': i,
'id': 'btn_' + i,
'class': 'btn btn-danger'
})
arr.push(boton);
}
$(function() {
$('button').after(arr);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button type="button" class="btn btn-primary">Imprimir</button>
我还建议不要在动态内容上创建增量 id
属性,因为它通常会使代码变得比需要的更复杂。使用通用的 类 以及 DOM 遍历方法和数据属性。然而,最好的方法将完全取决于您的具体用例。