我无法从JS创建的HTML中获取数据

时间:2013-07-19 03:07:10

标签: javascript jquery html

我使用jQuery创建一个新的HTML,但是当我使用$ .get或$ .ajax方法时,它无法获取该数据? 例如,我测试了一个简单的jQuery:

$(function () {
    $(".tc3").html('<div id="test" ></div>');

    if($('.noprint a[href*="/f1-"]:first').length){
        $.ajax({
            url: '/f1-' ,
            type: 'GET',
            success: function(data) { 
                d = $('#test', data).length;
                alert(d)
            } 
        });
    }
});

但是当我尝试它时警告结果为0。所以为什么 ?谢谢你的回复

4 个答案:

答案 0 :(得分:3)

虽然我可能会弄错,但我确信你的语法不正确。

在表达式$('#test', data)中,您传递data作为上下文来约束您的选择器#test可以匹配的内容。

来自jQuery documentation

  

默认情况下,选择器在DOM开始时执行搜索   在文档根目录。但是,可以给出替代上下文   通过使用可选的第二个参数到$()函数进行搜索。   例如,要在事件处理程序中进行搜索,搜索可以是   像这样限制:

$( "div.foo" ).click(function() {
  $(  "span", this ).addClass( "bar" );
});
     

当搜索范围选择器仅限于上下文时   这样,只有点击元素中的跨度才能获得额外的元素   类。

     

在内部,选择器上下文使用.find()方法实现,   因此$( "span", this )相当于$( this ).find( "span" )

考虑到这一点,您的上述data对象必须是DOM元素,Document或jQuery对象,才能正确约束#test选择器的范围。由于data不太可能是这些对象中的任何一个,因此约束将产生无效的#test范围。因此,0被警告。

因为我不相信约束#test选择器是你的意图(毕竟在一个有效的HTML页面上只有一个id为test的元素,无论上下文如何),我只能假设您打算将data的内容附加到test div。如果我的假设是正确的,你应该将你的成功方法改为:

success: function(data) { 
   var d = $('#test').html(data).length;
   alert(d);
} 

在这种情况下,长度将为1,因为html()被链接到初始$('#test')选择器。由于页面上只有一个ID为test的元素,因此会提示1。

如果你想要数据的长度,你可以直接用data.length查询它,它可以根据返回的对象或字符串给你合适的结果。

success: function(data) { 
   $('#test').html(data);

   var d = data.length;
   alert(d);
} 

最后,如果data可以为null,未定义或其他方法,则可以使用var d = data ? data.length : 0;来确保它始终默认为0.

注意:除了解决你的语法之外,这个答案很多都是推测性的,因为我不确定你要完成什么。在问题中添加更多详细信息有助于我们更好地解决您的问题。

答案 1 :(得分:0)

为什么同一个jQuery选择器中同时包含#testdata

尝试

success : function(data){
   test = $("#test").length;
   d = data.length;
   alert("Test length: " + test + "\nData length: " + data);
}

答案 2 :(得分:0)

通过将数据作为第二个参数传递给$('#test',data),您打算做什么?第二个参数是评估第一个参数(选择器)的上下文。你从服务器返回的数据是什么?它必须是'#test'选择器的父级才能工作。

答案 3 :(得分:0)

如果我查看您的Javascript(codefm1.forumvi.com/99787.js):

$(function(){

    $(".tc3").html('<div id="test" ></div>');
    if($('.noprint a[href*="/f1-"]:first').length){

        $.ajax({

            url:'/f1',
            type:'GET',
            success:function(data){

                test=$("#test").length;
                d=data.length;alert("Test length: "+test)
            }

        }
        )
    }

}
);
$(function(){
    $(".tc3").html('<div id="test" ></div>');if($('.noprint a[href*="/f4-"]:first').length){
        $.ajax({
            url:'/f4-',type:'GET',success:function(data){
                $('#test').html(data);var d=data.length;alert(d)
            }

        }
        )
    }

}
);

我发现您的第一个alert仅确认此时#test尚不存在。尝试在第一个ajax请求中提醒data.length而不是$('#test').length。如果它仍然返回0则表示没有返回任何内容。