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);
});