使用ajax从页面加载JS

时间:2013-08-13 22:59:47

标签: javascript jquery ajax

我使用$('.class').load('url #id'),但它只获取HTML代码,或者我做错了什么)

如何从页面获取JS?

我使用此代码的网站:http://vbtes.p.ht/Amira/#!contacts(没有js,请勿使用标签页。)

拥有JS:http://vbtes.p.ht/Amira/#!contacts

var sm = 1;
var oldactivemenu = 0;
var selectedmenu = '';
var elemthis;

function ocmenu(heshatr, thiselem) {
    elemthis = thiselem;
    if (sm == 1) {
        location.hash = '!' + heshatr;
    }
}
$(function () {
    $(window).hashchange(function () {
        // Alerts every time the hash changes!
        var linkmenuurl = $(location).attr('href').split("#!")[1];
        if (location.hash == '') {
            linkmenuurl = '';
        }
        if (sm == 1 && selectedmenu !== linkmenuurl) {
            $('.active').removeClass('active');
            $(elemthis).addClass('active');
            if ($(elemthis).parent('.main-menu__item_level_1')) {
                $(elemthis).parent().parent().parent().children('.main-menu__item-link').addClass('active');
            }

            selectedmenu = linkmenuurl;
            sm = 0;
            $('.new').load(linkmenuurl + ' #lay_body_get', function () {
                $('.new').show();
                $('.lb2').css({
                    top: $('.lb1').height() * -1 - 60
                });
                $('.new').animate({
                    left: 0
                }, 500);
                $('.old').animate({
                    left: -1450
                }, 500, function () {
                    $('.old').addClass('ob1');
                    $('.new').addClass('nw1');
                    $('.ob1').removeClass('old').addClass('new').css({
                        left: 1450
                    }).hide(100);
                    $('.nw1').removeClass('new').addClass('old').animate({
                        top: 0
                    }, 100, function () {
                        sm = 1;
                    });
                    $('.ob1').removeClass('ob1');
                    $('.nw1').removeClass('nw1');

                });
            });
        }
    })

    // Trigger the event (useful on page load).
    $(window).hashchange();
});

2 个答案:

答案 0 :(得分:3)

使用选择器调用.load时,jQuery将从结果中删除脚本。

来自jQuery documentation

  

脚本执行

     

使用不带后缀选择器的URL调用.load()时   表达式,内容在脚本出现之前传递给.html()   除去。这将在丢弃之前执行脚本块。如果   使用附加到URL的选择器表达式调用.load(),   但是,在更新DOM之前,脚本会被删除,   因此不会被执行。两种情况的例子如下所示:

答案 1 :(得分:0)

使用记录为here$.getScript(url)

如果这些是加载的HTML中的<script>标记,则使用jQuery迭代它们,并使用上面的函数加载它们。

添加:您可以执行以下操作:

$.ajax(myPageURL, { complete: function (data) { 
    $(data.responseText).filter('script').each(function () { 
        $.getScript(this.src);

        // OR

        $('head').append($(this).html());
    }); 
}});

这是jQuery.load()问题的解决方法。它会再次加载整个页面,但会删除<html><body><head>(等等)元素 - 从而允许您过滤页面标题中的脚本。请注意,这将导致页面第二次加载。

BTW ,在您的网页上添加<script>代码而非使用$.getScript(),至少可以在Chrome中调试脚本。