如何使用jQuery $ .get()获取页面的DOM结构

时间:2012-01-18 12:37:19

标签: dom jquery

使用jQuery 1.7.3

我最近在我的一个脚本中用$.load();替换了$.get();调用,以利用请求中止和其他很酷的功能 - 所以我要求正常(在这种情况下是php) )html页面而不是返回JSON或XML的文件。

但我注意到你正在加载的页面上出现脚本错误 - 例如onError='myFunction(this);'内联脚本调用未在第1页上定义但在第2页上出现的函数,可能会抛出错误(在这种情况下,第1页上的undefined function myFunction)。我也看到了图片的请求。

我的用例是我需要从新页面获取一个div值的数据,而不是整个事物,当然不是图像 - 有没有办法让jQuery只请求标记而不是“跟随”图像链接,也不尝试运行任何内联脚本?

示例:

Page1:
$.get('page2', {someData:123}, function(data){
    var myDiv = $('#myDiv', data); //get the div I want from the response

    //but at this point the browser has run the inline 
    //scripts and requested the images :(
    //do something with the (very expensive) data

    $('body').append(myDiv);
});

Page2:
<div id='myDiv'>
  <!-- some dynamic data that changes over time -->
</div>

我是否应该编写(另一个)文件,我可以用JSON查询以获取我需要的数据,然后在脚本中解析它并生成标记等等,这有一些问题,但是在这方面已经足够了用例会比它的价值更麻烦,特别是考虑到我也在复制代码。

关于内联脚本,我可以(并且作为一种解决方法)在第1页上定义函数以避免错误。

任何帮助表示赞赏

3 个答案:

答案 0 :(得分:1)

您可以从选择器中排除节点:

var myDiv = $(data).find('#myDiv').find('*').not('img, script');

http://api.jquery.com/not/

答案 1 :(得分:1)

您是否曾尝试使用$.ajax()执行ajax请求并将dataType设置为texthttp://api.jquery.com/jQuery.ajax/

答案 2 :(得分:0)

我最终找到的最好的方法是非常简单 - 当你向页面发出AJAX请求时,发送一个额外的参数来阻止你的页面输出你不需要的数据。

Page1:
$.get('page2', {someData:123, ajax:true}, function(data){
    var myDiv = $('#myDiv', data); //get the div I want from the response
    $('body').append(myDiv);
});

Page2:
<?php if (isset($_GET['ajax'])) { ?>
  <div id='myDiv'>
    <!-- some dynamic data that changes over time -->
  </div>
  <?php exit(); ?>
<?php } else { ?>
  //show the page as normal
<?php } ?>

这种方法很难实现,但是当你有一个非常大的搜索页面可以完成所有类型的额外工作时,它可以完成工作并且很有效率,但是你想要的只是结果的下一页。