我有一个简单的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 = ...*
内。当我将它作为函数调用中的变量或文字元素传递时,为什么会这样?
答案 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')
。