我使用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。所以为什么 ?谢谢你的回复
答案 0 :(得分:3)
虽然我可能会弄错,但我确信你的语法不正确。
在表达式$('#test', data)
中,您传递data
作为上下文来约束您的选择器#test
可以匹配的内容。
默认情况下,选择器在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选择器中同时包含#test
和data
?
尝试
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则表示没有返回任何内容。