如何使用元素属性值作为jQuery的选择器

时间:2010-07-21 03:13:00

标签: jquery ajax

我正在尝试使用锚点的title元素来确定目标通过ajax加载到哪个块元素,目前它看起来像这样:

$(document).ready(function() {
    $('#content').load('overview.php'); //by default initally load text from overview.php
    $('body').delegate('a.ajax', 'click', function(e) { //start function when any link is clicked
        e.preventDefault();
        var content_show = $(this).attr("href"); //retrieve href of link so we can load the correct file
        $.ajax( {
            method: "get", url: content_show,data: 0,
            beforeSend: function(){$("#loading").show("fast");}, //show loading just when link is clicked
            complete: function(){ $("#loading").hide("fast");}, //stop showing loading when the process is complete
            success: function(html) { //so, if data is retrieved, store it in html
                $($(this).attr("title")).show("slow"); //animation
                $($(this).attr("title")).html(html); //show the html inside the target div
            }
        }); //close $.ajax(
    }); //close delegate(
}); //close $(

这一点的全部意义上,我可以从一个页面点击链接,内容div中标题为#content load,子标题div中标题设置为#subcontent的链接。这是可能的,如果是的话,我做错了什么?

更新 好吧,显然$(this)变量在进入$ .ajax调用时有变化,所以将$(this).attr(“title”)放入变量然后调用变量代替选择器,按预期工作。

1 个答案:

答案 0 :(得分:1)

逻辑看起来对我来说足够了。我们会想到两个可能的问题:ajax调用可能失败,或者标题标记可能没有返回您期望的字符串。出于这个原因,我建议在你的console.log函数中添加一个ajax错误处理程序和一些额外的$.ajax,以帮助你了解从firebug或web检查器发生的事情。

success: function(html) {
    console.log("The title tag is: " + $(this).attr("title"));
    $($(this).attr("title")).show("slow");
    $($(this).attr("title")).html(html);
},
error: function(XMLHttpRequest, textStatus, errorThrown){
    console.log("An ajax error occurred: "+errorThrown);
}