ランダムなHTMLドキュメントで次のスクリプトタグを想定します。
<script id="target" type="store">
//random JavaScript code
function foo(){
alert("foo");
}
foo();
</script>
次の式で、script
属性に値store
を持つtype
のすべての要素が見つからない理由を誰かが説明できますか。
var sel = $('#target script[type="store"]');
jQueryバージョン:v1.7.2 Chromeバージョン:25.0.1364.172(Debian Squeezeで実行)
セレクター$('#target script[type="store"]')
は、IDがstore
の要素の子であるタイプtarget
のスクリプトタグと一致します。これは、サンプルHTMLには当てはまりません。
タイプがstore
のすべてのスクリプトタグを選択する場合、セレクターは次のようになります:$('script[type="store"]')
。
IDがtarget
の特定のスクリプトタグのみを選択する場合は、$('#target')
のみを使用できます。 IDはその要素に固有である必要があるため、より具体的にする必要はありません。 jQueryはネイティブのdocument.getElementById()
を利用して要素を選択できるため、IDセレクターのみを使用する方が効率的です(マイクロ最適化かもしれませんが、それでも...)
あなたが書いたものが意味するので:属性script
がtype
に等しく、の子孫であるすべてのstore
要素を見つけてください#target
(スペースのため)。
あなたは次のようなことをすることができます:
var sel = $('script#target[type="store"]');
ただし、IDはすでに要素を識別しているため、これは不要です-ドキュメント内のどの要素も同じIDを共有できません。
私があなたの説明をよく理解しているなら、あなたが必要とするのは:
var sel = $('script[type="store"]');
もう1つ、これにはtype
属性を使用しないでください。 非常に特定の目的があります :
Type属性は、スクリプトの言語またはデータの形式を示します。属性が存在する場合、その値は有効なMIMEタイプである必要があります。 charsetパラメーターは指定しないでください。属性が存在しない場合に使用されるデフォルトは「text/javascript」です。
したがって、type
の代わりにdata-type
を使用することをお勧めします。
これを使って
var sel = $('script#target[type="store"]');
あなたはこれを必要とします -
var sel = $('#target[type="store"]');
あなたがする必要があります
var sel = $('script#target[type="store"]');
このセレクターでは、スクリプトタグ内にtype = "store"が含まれるスクリプトタグを探しています。試してみてください:
$('script#target[type="store"]');
可能な限り短い説明:
#target
の子スクリプトをターゲットにしようとしています。
たとえば、マークアップの効果が...
<div id="target"><script type="store"></script></div>
... jQueryの選択は機能します。
特定の値のタイプを持つすべてのスクリプト要素を選択するには:
$('script[type="value"]')
IDを持つ特定のスクリプトを選択するには、次のようにします:
$('script#id[type="value"]')
識別子なしで実行されているスクリプトをターゲットにすることもできます:
<script>
// Prevent Global Scope Pollution
(function($){
// DO - Use it outside of an event...
var Script_Self = $('script').last();
console.log(Script_Self);
// DONT - Use it inside of an event...
$(document).on('ready', function() {
var Script_Self = $('script').last();
console.log(Script_Self);
});
})(jQuery);
</script>
<script>
// Prevent Global Scope Pollution
(function($){
// The event will target me :(
})(jQuery);
</script>
このコードを実行すると、最初のスクリプトがそれ自体をターゲットにしてコンソールに出力し、// The event will target me :(
コメントを使用してドキュメントの最後のスクリプトをターゲットにすることがわかります。
これは、イベントの外部で、DOMに追加される最後の要素が、命令を実行するスクリプトタグであるためです。これは、論理的には$('script')
の最後のスクリプトタグを意味します。
ただし、イベント内(この場合はdocument.on('ready')
)は、DOMの読み込みが完了するまで待機するため、ドキュメントに存在する可能性のある追加のスクリプトタグが読み込まれ、目的の.last()
が置き換えられます。目標。