jQuery.html()是否操纵DOM?
我正在运行以下功能:jQuery.html()是否操纵DOM?,jquery,dom,dom-manipulation,Jquery,Dom,Dom Manipulation,我正在运行以下功能: $(function () { var tbl = $('table[id^="stg_"]'); var tmpl = tbl.attr('id').replace('stg_', ''); // how many elements before console.log($(":input, select").length); $.get('templates/' + tmpl + '.html', function (
$(function () {
var tbl = $('table[id^="stg_"]');
var tmpl = tbl.attr('id').replace('stg_', '');
// how many elements before
console.log($(":input, select").length);
$.get('templates/' + tmpl + '.html', function (data) {
tbl.html(data);
});
// same number after ?
console.log($(":input, select").length);
});
但是,jQuery看起来并不是在修改DOM,因为我在我的上得到了相同的。length
:输入,在设置表的html之前和之后选择“
选择器”
这只是一个测试,但我很好奇是否有人尝试过这个方法,或者知道为什么在设置表的.html之后长度会相同。
$。get
是异步的,第二个日志显示相同的数字,因为它是在ajax完成之前记录的,请尝试
console.log($(":input, select").length);
$.get('templates/' + tmpl + '.html', function (data) {
tbl.html(data);
console.log($(":input, select").length);//probably it will give a different number
});
或者在当前场景中设置async:false
(强烈不建议这样做)
$.get
是异步的,第二个日志显示相同的数字,因为它是在ajax完成之前记录的,请重试
console.log($(":input, select").length);
$.get('templates/' + tmpl + '.html', function (data) {
tbl.html(data);
console.log($(":input, select").length);//probably it will give a different number
});
或者在当前场景中设置async:false
(强烈不建议这样做)
尝试:
您正在发出一个异步请求,并在ajax请求完成之前打印元素数。因此,请尝试在异步执行的回调中打印计数。尝试:
您正在发出一个异步请求,并在ajax请求完成之前打印元素数。因此,请尝试在异步执行的回调中打印计数。
$get
是异步的-它触发请求,代码继续运行。结果,console.log($(“:input,select”).length)在$get
返回之前执行code>。添加console.log($(“:输入,选择”).length)
到回调(在tbl.html(data)
之后),您将看到更好的结果。$.get
是异步的-它触发请求,代码继续运行。结果,console.log($(“:input,select”).length)在$get
返回之前执行code>。添加console.log($(“:输入,选择”).length)
到回调(在tbl.html(数据)
之后),您将看到更好的结果。您首先报告长度,然后才操作dom;)。@Nemoy和@3nigma所说的。您首先报告长度,然后才处理dom;)。@Nemoy和@3nigma说的话。就是这样!非常感谢你。我会在10分钟内把这个标记为答案:)就是这样!非常感谢你。我将在10分钟内将此标记为答案:)
$.get('templates/' + tmpl + '.html', function (data) {
tbl.html(data);
console.log($(":input, select").length);
});