

jqueryを勉強中です。
ブログ内の#mainというボックス要素にあるimgへ
自動的にdata-lightboxをつけようと下のようなスクリプトを設置しました。
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5. …></script>
<script type="text/javascript">
$(function(){
$('#main a').each(function(i){
if( $(this).find('img').length ) {
$(this).attr('data-lightbox','number' + (i+1));
}
});
});
</script>
上記は正常に動いたのですが、
#main要素以外のボックス要素も指定したいです。
複数の要素を指定するにはどう記述すればよいのでしょうか?
初歩的なことだと思うのですが、タイトルのようなワードで調べても分からず、
どういうキーワードで調べていいのかも行き詰ってしまい
こちらで質問させていただきました。
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
オブジェクトを読み込んだ後でdata-lightboxを付加する必要があるのでコールバック関数の中で処理しましょう。
<script>
$(function(){
$("#side").load("ブログ記事URL .entryBody", function(data) {
if(data == null){
$("#side").append("読込みに失敗しました");
}
else{
$('#side a').each(function(i){
if( $(this).find('img').length ) {
$(this).attr('data-lightbox','number' + (i+1));
}
});
}
});
});
</script>
No.4
- 回答日時:
ANo2です。
>適用されなかった#sideには#mainにあるブログ記事を読み込ませています
全体がどうなっているかわかりませんが、察するところ、ご質問のスクリプト実行時にはまだ記事の読み込みが終了していないものと推測されます。
それなので、いくらセレクタで指定していても、該当する要素が(未だ)存在しないので、処理されていないように見えるということではないかと。
(ANo2で記した「IMG要素の入れ忘れ」に近い状態と言えます)
というわけで、問題点は、多分、セレクタの問題ではなく、処理のタイミングではないかと思われます。
>読み込みではなく直接#sideに画像を貼った場合だとlightboxが反映されたので
>これが原因だということは分かったのですが解決には至っていません。
この状況からも、原因は上記ではないかと推測します。
>上記のように別ページを読み込んでいる場合の複数セレクタはどう
>指定すればよいのでしょうか?
>当たり前だとは思うのですが、.entryBodyを指定しても
>反映されませんでした。
原因が推測通りだとすれば、セレクタの問題ではなく実行のタイミングの問題です。
対処法としては、#sideの内容に関しては読込が終わってからご質問の処理を行うということになるでしょう。
一方、#mainはdocument.ready時に処理可能ですが、遅らせても良ければ#sideと同時に(複数セレクタで)、そうでなければ、#sideだけ遅らせて処理をするというふうになさればよろしいかと。
#sideの読み込みが終わってから処理をさせるには、最初にご提示の
$(function(){~~});
の中ではなく、補足でご提示なさっている
$("#side").load("ブログ記事URL .entryBody", function(data) {~~});
の function(data){~~} 内に記すことで、そのタイミングで実行することができます。
No.2
- 回答日時:
セレクタとしては
>'#main a,#side a'を入れてみました。
で良いはずですけれど…
IMG要素を入れ忘れているとか、リンク要素の中に無いとかはありませんか?
>どういうキーワードで調べていいのかも行き詰ってしまい~
jQueryの本家サイトがありますからそこで調べるのが一番です。
http://jquery.com/
セレクタに関してなら
http://api.jquery.com/category/selectors/
ご質問なさっている、複数セレクタは
http://api.jquery.com/multiple-selector/
No.1
- 回答日時:
#mainを外せばすべてのaタグに対して処理を行います。
$('a').each(function(i){
...
「jQuery セレクター」などで検索するとHITします。
http://semooh.jp/jquery/
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数のxmlを同ページに読み込み...
-
idを使わずにonclickで自身の要...
-
setTimeoutで、止まらない
-
クリックすると上に開くアコー...
-
ActiveXobjectが作成できない
-
jspからjavascriptの変数引継ぎ
-
C#テキストボックスの文字を配...
-
『名前空間』の意味を教えてく...
-
getElementByIdでASP.NETのText...
-
innerHTMLにて設定した情報を再...
-
<a>タグのテキストを取得
-
excle VBA とweb上の検索を利用...
-
メールフォームの日付入力フォ...
-
同じIDで定義した要素の配列を...
-
画像の一部を表示
-
undefinedを表示させない方法は...
-
HTMLにWSHを組み込む
-
GASでundefinedエラーが出ます
-
○歳△ヶ月と×日を計算してくれる...
-
C言語でクロージャを記述する
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
functionから別のfunctionを実...
-
関数でy=g(x)のgとは何の略です...
-
クリックすると上に開くアコー...
-
idを使わずにonclickで自身の要...
-
要素名がスペースを含む場合のj...
-
ページ内に複数表がある場合のT...
-
jQueryの :not() .not() が有効...
-
jslintのエラーについて質問
-
無名関数を使うメリットは何で...
-
Matlabで自作関数をオーバーロード
-
getElementByIdを使用したグロ...
-
JAVAスクリプトで指定時間以降...
-
Ajaxでデータベース(PostgreSQL)
-
XMLHttpRequestでキャッシュを...
-
処理前の「お待ちください」
-
jQueryの"return false"の役割...
-
クロージャーの利点が理解できない
-
javascript(jQuery)でセル内...
-
複数のxmlを同ページに読み込み...
-
jQuery|:not(:animated)
おすすめ情報
外部リンクのバナーなどがあるので、指定した要素にのみ適用させたいです。
jQuery セレクターで検索し、'#main a,#side a'を入れてみました。
#mainは適用されましたが#sideには適用されませんでした。
後出しで申し訳ありません、
適用されなかった#sideには#mainにあるブログ記事を読み込ませています。
<script>
$(function(){
$("#side").load("ブログ記事URL .entryBody", function(data) {
if(data == null){
$("#side").append("読込みに失敗しました");
}
});
});
</script>
読み込みではなく直接#sideに画像を貼った場合だとlightboxが反映されたので
これが原因だということは分かったのですが解決には至っていません。
上記のように別ページを読み込んでいる場合の複数セレクタはどう指定すればよいのでしょうか?
当たり前だとは思うのですが、.entryBodyを指定しても反映されませんでした。
申し訳ないです、補足に書き足した通りの状況で上手くいかないようです。
読み込みではなく普通にリンク画像を貼るとlightboxが動作しました。