如何在页面加载后获得动态生成的文本? (jQuery的)

时间:2013-10-01 19:33:01

标签: javascript jquery ajax mako

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

enter image description here enter image description here

我的问题是我需要将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 Class jQuery:in Networking Class 部分中的代码在此ajax之后被激活

在我的wireInbox功能中:

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

loadResource函数

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中。你会如何做到这一点?

2 个答案:

答案 0 :(得分:1)

确保 之后加载jQuery:

<p id="inbox_conversation">
    %if inbox_details.body:
        ${inbox_details.body}
    %endif
</p>
...
<script type='text/javascript' src='PATH_TO_JQUERY'></script>

答案 1 :(得分:1)

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

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

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