在Ajax xhr响应上使用jQuery.filter和jQuery.find时的结果不同

时间:2015-07-13 13:34:47

标签: javascript jquery html css ajax

我的网站上有一个ajax菜单。 此菜单发送GET请求以检索所单击链接的页面内容。 我从请求中获取的内容是一个完整的HTML页面,其中包含脚本和样式标记在页面上找到的所有元素。 我在XHR响应上使用jQuery.filter将脚本作为HTML脚本标记。 但是,当我尝试获取样式表链接标记时,它无法正常工作。 如果我在XHR上使用jQuery.findon,它只给我样式链接标签。 这是我使用的Ajax

$.ajax({
    type: 'GET',
    url: url,
    dataType: "html",
    async: false,
    error: function(oXHR, type, exception) {
        console.dir(exception);
    },
    success: function(xhr) {
        var scripts = $(xhr).filter('.vod'),
            styles = $(xhr).find('link[name="vod"]');
        $(styles).each(function() {
            if (this && this.href) {
                loadStyle(this);
            }
        });
        $(scripts).each(function() {
            if (this.text) {
                $.globalEval(this.text || this.textContent || this.innerHTML || '');
            } else if (this.src || this.href) {
                loadScript(this);
            }
        });
        $('#container').html($(xhr).find('#content')[0]);
    }
});

1 个答案:

答案 0 :(得分:1)

Jquery从响应中删除html,head和body标签。这是因为当您设置t adiv元素的innerHTML时JavaScript的工作原理。所以你没有一个完整的html页面,你有body和head标签的子节点。

因此,您需要使用过滤器,因为链接元素不是子元素。

您的期望:[htmlNodeReference]

获得的内容[title, link, h1, div, etc]