javascript - 如何使用脚本标签进行 jQuery .load()

标签 javascript jquery html ajax twitter-bootstrap

*我知道以前使用 Ajax 和其他方法回答过这个问题,但没有任何符合我的需求。

我正在制作一个 Bootstrap 管理主题,我正在使用 jQuery 的 .load() 来避免页面刷新并使交易更顺畅,尽管它不会加载 脚本 .. ./script 位于页面底部,它会被忽略。

我无法为每个脚本创建一个新文件并特别加载它,因为这意味着任何使用我的主题的人,对于用于表格等的最小脚本都必须相同(当它们可以简单地放在 script 标签),因此它不是可用的模板。

我的 jQuery 加载代码:

$('.navigation .nav li a').not('.nav-item-expandable > a').click(function(navActive){
            var href = $(this).attr('href');

            navActive.preventDefault();
            $('.content').load('/' + href + ' .content>*');
            $('.breadcrumb').load('/' + href + ' .navbar .breadcrumb>*').delay(200).queue(function(){
                breadcrumb();
                $(this).dequeue();
                });
            $('#scripts').load('/' + href + ' #scripts>*')

            history.pushState('', '', href);
        });

我的 html 的下半部分:

<div class="content"> ... </div>

<div id="scripts">
        <!-- Addons scripts -->
        <script src="jquery.min.js"></script>
        <script src="https://code.jquery.com/ui/1.12.0/jquery-ui.js"></script>
        <script src="addons/bootstrap/js/bootstrap.min.js"></script>
        <script src="addons/toastr/toastr.min.js"></script>
        <script src="addons/history.js/bundled/html4+html5/jquery.history.js"></script>

        <!-- theme scripts -->
        <script src="addons/theme.js"></script>

        <script language="javascript" type="text/javascript">
                // Icons show page
                $("body .show-icons li").each(function(){
                    $(this).append("<a>" + $(this).attr("class") + "</a>");
                });

        </script>
    </div>

最佳答案

The documentation明确提到这一点:

If .load() is called with a selector expression appended to the URL, however, the scripts are stripped out prior to the DOM being updated, and thus are not executed.

This thread似乎有答案 - 使用 get相反:

$('.navigation .nav li a').not('.nav-item-expandable > a').click(function(navActive){
    var href = $(this).attr('href');

    navActive.preventDefault();
    $.get('/' + href, function(html){
        var doc = $(html);
        $('.content').empty().append(doc.find('.content > *'));
        $('.breadcrumb').empty().append(doc.find('.navbar .breadcrumb > *'));
        $('#scripts').empty().append(doc.find('#scripts > *'));
        setTimeout(function(){ breadcrumb(); }, 200);
    });

    history.pushState('', '', href);
});

这也会更有效率,因为您只对新页面发出一个请求,而不是当前脚本发出的三个请求。

关于javascript - 如何使用脚本标签进行 jQuery .load(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39276049/

相关文章:

javascript - 切换时的树结构父位置 css

javascript - 使用 JQuery 从我的游戏目录中随机获取 8 张图像

javascript - 使用mapbox gl和三个js在 map 上的单层中渲染多个gltf 3D模型

javascript - 重置 AngularJS 表单元素

javascript - 如何使用 JSON 数据创建四列 HTML 表格?

php - $.getJSON 和 PHP 文件

javascript - 如何在单击时切换一个 div 中的内容并更改另一个 div 中的内容

html - div 和图像的 CSS 对齐问题

javascript - Number.MIN_VALUE 的用法

javascript - html-5 范围 slider 最大值和最小值