考えられる 2 つの問題:
そのクラスの要素が DOM に存在する前に、おそらくそのスクリプトを実行しています (詳細は後述)。
は、たとえば、またはhref
で始まる必要があります。相対リンクにするだけで、確実には機能しません。http://
href="http://www.google.com"
href="http://google.com"
href="google.com"
#2を修正すると仮定すると、#1の詳細は次のとおりです。
動作しません:
<!-- ... -->
<head>
<!-- ... -->
<script type="text/javascript">
$('.clickk').click(function(e){
window.location.href = $(this).find('a').attr('href');
});
</script>
</head>
<body>
<!-- ... -->
<div class="clickk" >
<a href="http://google.com">link</a>
blah blah blah.
</div>
これを修正するには、次の 2 つの方法があります。
ページの最後にスクリプトを配置する
これは通常、スクリプトをページの最初ではなく最後に配置するための推奨される方法です。
作品:
<body>
<!-- ... -->
<div class="clickk" >
<a href="http://google.com">link</a>
blah blah blah.
</div>
<!-- ... -->
<script src="jquery.js"></script>
<script type="text/javascript">
$('.clickk').click(function(e){
window.location.href = $(this).find('a').attr('href');
});
</script>
</body>
これにより、スクリプトのダウンロードを待機している間にレンダリングが停止しないため、見かけ上のページの読み込み時間も短縮されます。YUI のガイドライン(またはその他のガイドライン)を参照してください。スクリプトの上で定義された DOM 要素は、そのスクリプトからアクセスできます。スクリプトの下に定義された DOM 要素はそうではありません (遅延させるために次のようなことをしない限り)。
ready
イベントを利用する
何らかの理由でスクリプトを最後に置くことが適切でない場合は、ready
イベントを使用できます。
作品:
<!-- ... -->
<head>
<!-- ... -->
<script type="text/javascript">
jQuery(function($) {
$('.clickk').click(function(e){
window.location.href = $(this).find('a').attr('href');
});
});
</script>
</head>
<body>
<!-- ... -->
<div class="clickk" >
<a href="http://google.com">link</a>
blah blah blah.
</div>
jQuery
関数を に(またはを使用しない限り$
の単なるエイリアスである) に渡すことは、;に関数を渡すことと同じであることに注意してください。詳細: http://api.jquery.com/jQuery/#jQuery3jQuery
noConflict
$(document).ready(...)