2011-10-18 1 views
2

iOSデバイスで動作するアンカー:アクティブCSS状態を持つために、各アンカーに「ontouchstart」属性を追加する必要があるアプリケーションがあります。DOMが既にロードされた後にjQueryまたはJavaScriptを使用してアンカーに属性を追加する

DOMが既に読み込まれた後、アプリケーション全体がAJAX経由でコンテンツを読み込むということは、$(selector).attr('ontouchstart','')の呼び出しは、AJAX経由で後で追加されるコンテンツではなく、最初の画面でのみ機能することを意味します。

各画面が別々の関数でロードされているため(関数によって構築されることもある)、すべてのアンカーに適用される単一のjQueryまたはJavaScript呼び出しを可能にするソリューションを探したいと思います。 DOMは、それぞれの機能を実行して個別に呼び出しを追加するのではなく、読み込まれます(数百もあります)。

これも可能ですか?どんな助けでも大歓迎です。

答えて

2

あなたはDOMNodeInsertedイベントを試みることができる:任意のタイプのノードがDOM、単にノード名(タグ)をテストし、属性を追加するコードに追加されたときに

$(document).bind('DOMNodeInserted', function(event) { 
    if (event.target.nodeName == 'A') { 
    $(event.target).attr('ontouchstart',''); 
    } 
}); 

イベント自体が発生します。

+0

非常に興味深い!各ノードの挿入時にイベントを発生させるのにパフォーマンス上の問題はありますか? – dSquared

+0

JS変異イベント(その1つです)にパフォーマンス上の不利益があります。実際にはMozillaはその使用を阻止します(https://developer.mozilla.org/en/Extensions/Performance_best_practices_in_extensions#section_8)。 '[DOM Level 3で廃止されました](http://www.w3.org/TR/DOM-Level-3-Events/#event-type-DOMNodeInserted)...しかし、あなたはそれを使って離れていくかもしれませんアプリケーションの複雑さによって異なります。あなたができる場合は、ベンチマークを実行することがベストな方法です:-)。私はちょうど可能な代替物としてそれを提示したかった – Clive

+0

ありがとうございました。これは間違いなく最適なオプションです...私はパフォーマンスのペナルティについて見てみる必要があります=) – dSquared

2

liveまたはdelegateイベントリスナーをお試しください。これらは両方とも、onloadイベントの後に追加されたDOM要素で動作します。

+0

過去に$ .live()を使用しましたが、イベント特有のことを理解しています。上記の私のケースで私はどのようなイベントを使用しますか? – dSquared

+0

あなたがどんなイベント(またはAJAXコールがイベントです)を待っているのではないかと思います。私が知る限り、あなたは "未来"の要素に属性を設定することはできません。すべてのajax呼び出しの後にその属性を追加する必要があります。 –

関連する問題