-1

私はこのコードを持っています:

$("#downloadPopup").attr("href")

これによりリンクが返されますが、リンクを収集するためのコールバックが必要です。たとえば、次のようになります。

  $("#downloadPopup").attr("href", function(){
        console.log($(this)); 
       // i need make sure the link value is available (promise).
    });

私はこれを試しましたが、機能しません。コールバックにパラメータを渡す必要があるかどうかわかりません。ありがとう

4

2 に答える 2

6

属性の値の取得は非同期操作ではありません。情報は DOM にあるため、取得するだけで済みます。コールバックを使用する必要はありません。

var pop = $("#downloadPopup")
var href = pop.attr("href");
doSomethingWith(pop, href); 

操作をすぐに実行できない場合は、コールバックを使用する必要があります。たとえば、HTTP 要求が応答を受け取ったとき、ユーザーがリンクをクリックしたとき、または asetTimeoutが 0 になったときなどです。

于 2013-02-28T22:24:25.170 に答える
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>
于 2013-02-28T22:28:57.747 に答える