参数不能在$() - jQuery之外工作

时间:2016-03-09 12:45:05

标签: javascript jquery frontend

我有一个简单的AJAX脚本,我很好奇为什么参数不能在$()块之外工作:

var loadWork = function(el) { //element which href will be used
    var url = $(el).attr('href'); //it doesn't work if 'el' is not in $()
    $.get(url, function(data) {
        $('#work-gallery').html(data);
    });

}

$(document).ready(function() {
    loadWork('#work ul li a[href="includes/wdes.html"]')
    $('#work ul li a').click(function(evt) {
        evt.preventDefault();
        var element = $(this);
        loadWork(element);
    });
});

el函数的loadWork(元素的简称)参数需要位于$()表达式中的*var url = ...*内。当我将它作为函数调用中的变量或文字元素传递时,为什么会这样?

2 个答案:

答案 0 :(得分:3)

你正在传递一个字符串,所以如果你不能用$()包裹它,它只是一个字符串,所以就像

一样
'#work ul li a[href="includes/wdes.html"]'.attr('xyz')

但那是废话,因为.attr方法是jqueryObjects的一个属性,所以使用

$('#work ul li a[href="includes/wdes.html"]')

将选择匹配的domnodes并将它们包装为jquery对象,以便您可以运行类似.attr()的jquery方法

答案 1 :(得分:1)

您要做的是:

点击#work内的链接后,加载该链接的href返回#work-gallery

对于简单内容加载作业,有.load() jQuery function,它接受​​一个URL并将返回的HTML放在一个元素中 - 就像你在loadWork()函数中所做的那样。所以,让我们抓住这个功能,这是多余的。

其次,您希望最初加载某些内容。最简单的方法就是在其中一个链接上触发click事件,因为我们已经有了正确的点击处理程序。

$(document).ready(function() {
    $('#work a').click(function (e) {
        e.preventDefault();
        $('#work-gallery').load(this.href);
    }).first().click();
});

请注意事件处理程序中的this如何指向DOM对象,因此您可以直接使用this.href,而不是绕过调用.attr('href')