我有这段代码:
$("#downloadPopup").attr("href")
这给了我一个链接,但我希望有一个回调来收集链接,例如:
$("#downloadPopup").attr("href", function(){
console.log($(this));
// i need make sure the link value is available (promise).
});
我尝试了这个但它不起作用,我不确定我是否必须将参数传递给回调。感谢
答案 0 :(得分:6)
获取属性的值不是异步操作,因为信息位于DOM中,您可以获取它。您不需要使用回调。
var pop = $("#downloadPopup")
var href = pop.attr("href");
doSomethingWith(pop, href);
如果无法立即执行操作,则需要使用回调。例如当HTTP请求获得响应时,当用户单击链接或setTimeout
达到0时。
答案 1 :(得分:2)
这可以很简单地完成
// Here we save a reference to the orginal method
$.fn._attr = $.fn.attr;
// We can now define our own version
$.fn.attr = function ( attr, callback ) {
// Now we test to make sure that the arguments are provided in the way you want
if ( typeof attr === 'string' && typeof callback === 'function' ) {
// Save the result of the callback
var result = callback.call( this, attr );
// If the callback returns a valid "value" we assign that as the new attribute
if ( typeof result === 'string' ) {
return $.fn._attr( attr, result );
}
}
// If the arguments, or return of our function, are not what we expected, we execute the normal method here
return $.fn._attr.apply( this, arguments );
};
要使用这个新的attr
函数,我们可以执行此操作
// Here prop is the name of the attribute you passed in
$( 'div' ).attr( 'foo', function ( prop ) {
return prop + 'bar';
});
结果将是
<div foo="foobar"></div>