前端技术分享,欢迎关注!

前端技术分享论坛

 找回密码
 注册帐号

QQ登录

只需一步,快速开始

查看: 8654|回复: 1
打印 上一主题 下一主题

ajax请求返回的内容,查找不到对象?

[复制链接]

127

主题

146

帖子

1146

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1146
跳转到指定楼层
楼主
发表于 2013-11-6 17:10:32 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
ajax代码:
  1.                         $.ajax({
  2.                             url: 'test.html',
  3.                             success:function(data){
  4.                                 alert($(data).find(".list")).length;
  5.                             }
  6.                         })
复制代码
test.html页面代码:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>无标题文档</title>
  6. </head>

  7. <body>
  8. <ul class="list">
  9.         <li>第 1 条新闻标题</li>
  10.         <li>第 2 条新闻标题</li>
  11.         <li>第 3 条新闻标题</li>
  12.         <li>第 4 条新闻标题</li>
  13.         <li>第 5 条新闻标题</li>
  14.         <li>第 6 条新闻标题</li>
  15.         <li>第 7 条新闻标题</li>
  16. </ul>
  17. </body>
  18. </html>
复制代码
ajax运行后,length=0, 即无法查找到test.html页面中的.list元素!

alert(data)可看到data包含整个test.html代码(类型string),那为什么会查找不到test.html页面中的.list元素呢?



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享
回复

使用道具 举报

127

主题

146

帖子

1146

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1146
沙发
 楼主| 发表于 2013-11-6 17:26:02 | 只看该作者
加点调试代码看下:
  1. $.ajax({
  2.                             url: 'test.html',
  3.                             success:function(data){
复制代码
通过浏览器调试工具,可以看到$(data)包含9个对象:




看上面截图就明白了,ajax请求返回内容是字符串格式,用$(data)获取到的是经过jquery处理过的nodeList(Dom节点list),jquery处理方式是:会过滤掉doc文档申明、html、head、body标签,只返回页面中text文本节点、meta、title 标签及body下的所有子节点(这里指ul.list)也就是说$(data)返回的nodeList中已包含ul.list ,所以$(data).find(".list"))会返回undefined ,正确的写法是:
  1. $.ajax({
  2.                             url: 'test.html',
  3.                             success:function(data){
  4.                                 alert($(data).filter(".list")).length;
  5.                             }
  6.                         })
复制代码
改成在$(data)对象中过滤查找.list ,这时候的.length就能返回1啦!!

.list 不在test.html 文档的根节点位置,比如:
  1. <div class="demo">
  2. <ul class="list">
  3. ....
  4. </ul>
  5. </div>
复制代码
这里就应该用 $(data).find(".list") 才能查找到对应的元素,原因就是上面 说的:ajax请求返回内容的jq对象只会返回body下的所有子节点(这里指.demo),.list节点是body 子节点.demo的子元素,自然得用.find()方法来查找啦!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

QQ|小黑屋|手机版|Archiver|前端技术分享 ( 粤ICP备20056750号  

GMT+8, 2024-4-25 19:44 , Processed in 0.219906 second(s), 36 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表