0

我正在执行 AJAX 请求以获取生成的 html 页面。我想在结果中找到一个特定的 div 并将其注入到请求来自的页面中。我还想包含可能位于此 div 内的嵌入式脚本或脚本链接。这是我想使用 AJAX 获得的页面的简单示例

<html>
<head>
    <script>alert("don't want this")</script>
</head>
<body>
<div id='findMe'>
    <p>Some content</p>
    <script>alert("want only this")</script>
</div>
<script>alert("don't want this")</script>
</body>
</html>

所以我只想提取ID为findMe的div。这是我在执行请求的页面中的内容

<script>
$(document).ready(function(){

    $.ajax({
          url: "ajax.htm",
          success: function(data){  

            $(data).filter("#findMe").appendTo("#output");

          },
          dataType: "html"
    });

});
</script>

<div id='output'></div>

但是缺少脚本标记,并且没有出现警报。它似乎已从 div 中取出。如果我做

console.log($(data))

我可以将每个脚本标签视为一个文档片段,但是在弹出之前我如何知道哪个在 div 中?

4

3 回答 3

0

你可以试试:

$(data).find('#findMe').appendTo('#output');

或者

$('<div/>').append(data).filter("#findMe").appendTo("#output");

附加data到演示div(DOM 中不存在)并对其进行过滤。

于 2012-08-07T17:05:01.490 回答
0

我认为您必须使用 .find() 而不是过滤当前 jQuery 集合的 .filter():

$(data).find("#findMe").appendTo("#output");

但我不确定脚本标签是否会被执行..

于 2012-08-07T17:06:49.687 回答
0

我不得不将结果视为 XML。使用 jQuery .find() 在 XML 对象中找到我要查找的元素,选择实际节点(数组 pos 0),将节点的内容转换为字符串,并注入输出 div。这是我发现执行仅包含在目标 div 中的脚本的唯一方法。

$.ajax({
    url: "ajax.htm",
    success: function (data){

        var node = $(data).find("#findMe")[0];

        if(node.xml)
        {
            $("#output").html(node.xml)
        }
        else if(new XMLSerializer())
        {
            $("#output").html((new XMLSerializer()).serializeToString(node));
        }
    },
    dataType: "xml"
});
于 2012-08-07T21:09:18.987 回答