前端技术分享论坛

标题: ajax请求返回的内容,查找不到对象? [打印本页]

作者: phpvar    时间: 2013-11-6 17:10
标题: ajax请求返回的内容,查找不到对象?
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元素呢?




作者: phpvar    时间: 2013-11-6 17:26
加点调试代码看下:
  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()方法来查找啦!!





欢迎光临 前端技术分享论坛 (https://www.phpvar.com/bbs/) Powered by Discuz! X3.2