1

所以我的 jQuery 加载了一个页面,其中包含一些 Mako 代码,这些代码加载了 Python 吐出的内容。

在此处输入图像描述 在此处输入图像描述

我的问题是我需要将 Mako 代码生成的文本捕获到 jQuery 变量中,但是在页面完全加载之前,jQuery 中没有捕获任何内容。

您将如何在 jQuery 中编写代码来做某事或等到页面完全加载?我尝试使用$('#inbox_conversation').html()内部,$(document).ready(function () {但它只是返回undefined


Mako模板代码

<p id="inbox_conversation">
    %if inbox_details.body:
        ${inbox_details.body}
    %endif
</p>

jQuery:在主类中

var navigateToInboxDetails = function(messageID) {
    WHOAT.networking.redirectToURL("#!"+inboxDetailsURL(messageID));
};

var combined_message = $('#inbox_conversation').html();
alert('combined_message = '+combined_message);
// ^ Returns nothing because it runs before HTML is loaded

jQuery:在网络类中

//redirect to another page... as the name suggests
var redirectToURL = function (url) {
    window.location = url;
};

Ajax 流程:

jQuery: in Main ClassjQuery: in Networking Class部分中的代码在 this ajax 之后被激活

在我的wireInbox 函数中:

var loadInbox = function() {
    loadResource(inboxURL(), null, function() {
        wireInbox();
        wireTableHighlighting();
    });
};

加载资源函数

var loadResource = function(url, params, callback) {
    WHOAT.networking.getToServerWithAjax(url, params, function (response) {
        //var $content = $($.parseHTML(response.trim()));
        var $content = $($.parseHTML($.trim(response)));
        var $container = $('#dashboard-display');
        var $content_to_hide = $container.children();

        $.when($content_to_hide.fadeOut('fast')).then(function () {
            $content.hide();
            $container.append($content);

            $content.fadeIn('fast', function(){
                $content_to_hide.remove();

                if(callback) {
                    callback();
                }
            });
        });
    });

注意:如果我放置 $('#inbox_conversation').html(); 在按钮操作上,它会提醒我需要获取的内容。所以我知道问题是我的页面还没有完成渲染问题。

我试图做的是从 P 标签内获取文本,然后将其拆分并将其一部分放入另一个 div 中。你将如何做到这一点?

4

2 回答 2

1

确保在您要更新的相关 HTML之后加载 jQuery :

<p id="inbox_conversation">
    %if inbox_details.body:
        ${inbox_details.body}
    %endif
</p>
...
<script type='text/javascript' src='PATH_TO_JQUERY'></script>
于 2013-10-01T19:38:04.347 回答
1

在加载页面之前,您无法从页面获取数据。

$(document).ready(function () {
    var combined_message = $('#inbox_conversation').html();
    alert('combined_message = '+combined_message);
});

您尝试放入$('#inbox_conversation').html()$(document).ready(function () { });失败,因为它是异步调用的,即在将来的某个时间。所以它不能返回任何有用的东西。您需要等到您的页面被加载,然后再对其进行操作。你试图做的基本上是回到过去。您首先尝试执行alert(value),然后才实际加载value.

于 2013-10-01T19:48:37.453 回答