Jquery $(this)相对引用

时间:2012-01-11 18:15:41

标签: jquery this breadcrumbs

所以,我正在使用jQuery创建自己的breadcrumbs菜单,因为我不想加载另一个膨胀的插件。我有这段代码:

    function go_back(sec) {
    $('.content').html('<p>Loading</p>').load('_library_q.php?','sec='+sec);
    $(this).nextAll().remove();
}

单击链接即可调用。它加载内容区域并删除以下链接。这是每个链接格式的示例:

<span> &gt; <a style="cursor:pointer" OnClick="go_back('4');">Foo</a></span>

加载有效,但以下链接不会删除。我相信这是因为它正在寻找一个<a>,但它找不到一个。我需要引用父<span>。我试过用     $(this).parent().nextAll().remove(); 然而,这也不起作用。有什么帮助吗?

2 个答案:

答案 0 :(得分:3)

作为快速解决方案,我建议:

  function go_back(sec, elem) {
    $('.content').html('<p>Loading</p>').load('_library_q.php?','sec='+sec);
    $(elem).parent().nextAll().remove();
  }

HTML:

<span> &gt; <a style="cursor:pointer" OnClick="go_back('4', this);">Foo</a></span>

但是html中的javascript从长远来看是非常糟糕的,所以你应该完全摆脱它并设计整个事情而不依赖于html中的内联javascript。

演示:http://jsfiddle.net/gHh7D/

答案 1 :(得分:0)

在调用全局函数时,不能调用$(this)。相反,你可以解决这个问题的一种方法是循环链接并使用JQuery的.click()函数 -

$('a').each(function() {
    $(this).click(function() {
        $('.content').html('<p>Loading</p>').load('_library_q.php?', 'sec=' + $(this).attr('id'));
        $(this).parent().nextAll().remove();
    });
});

我为每个链接添加了一个id属性,因此您可以使用load值的id值。您可以在此处查看示例:http://jsfiddle.net/dxAyT/