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.1
- 回答日時:
#mainを外せばすべてのaタグに対して処理を行います。
$('a').each(function(i){
...
「jQuery セレクター」などで検索するとHITします。
http://semooh.jp/jquery/
No.2
- 回答日時:
セレクタとしては
>'#main a,#side a'を入れてみました。
で良いはずですけれど…
IMG要素を入れ忘れているとか、リンク要素の中に無いとかはありませんか?
>どういうキーワードで調べていいのかも行き詰ってしまい~
jQueryの本家サイトがありますからそこで調べるのが一番です。
http://jquery.com/
セレクタに関してなら
http://api.jquery.com/category/selectors/
ご質問なさっている、複数セレクタは
http://api.jquery.com/multiple-selector/
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){~~} 内に記すことで、そのタイミングで実行することができます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript プラグイン無しでContactform7にdatepickerを実装 3 2022/10/25 02:18
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- JavaScript jsで、switch文で書かれた分をif文にできませんか。 1 2022/07/28 15:10
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- JavaScript javascriptで変数を組み込みたい 2 2023/01/13 09:52
- JavaScript Google reCAPTCHAについて 1 2023/02/22 14:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
idを使わずにonclickで自身の要...
-
クリックすると上に開くアコー...
-
jquery 複数のメソッド
-
function(e)の意味を教えてくだ...
-
XMLHttpRequestでキャッシュを...
-
functionから別のfunctionを実...
-
ラジオボタン選択内容に応じて...
-
jQuery cssメソッドでの変数の...
-
小数点以下を5刻みで表示
-
jQueryの"return false"の役割...
-
現在地の取得について
-
jslintのエラーについて質問
-
CDの曲をケータイのSDに移す
-
jQueryでzipを解凍読み込みする...
-
ASP 最終日の表示
-
Matlabで自作関数をオーバーロード
-
JAVAスクリプトで指定時間以降...
-
要素名がスペースを含む場合のj...
-
jQueryを使用したギャラリー
-
関数でy=g(x)のgとは何の略です...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
idを使わずにonclickで自身の要...
-
functionから別のfunctionを実...
-
関数でy=g(x)のgとは何の略です...
-
jslintのエラーについて質問
-
クリックすると上に開くアコー...
-
XMLHttpRequestでキャッシュを...
-
ajax反映後のjqueryが動かない
-
function(e)の意味を教えてくだ...
-
要素名がスペースを含む場合のj...
-
jQueryの :not() .not() が有効...
-
jQueryでzipを解凍読み込みする...
-
関数名をテキストから読み込む...
-
getElementByIdを使用したグロ...
-
jqueryuiのdialog
-
jqueryのグローバル変数とロー...
-
jQuery 同じ処理を関数にまとめ...
-
XMLHttpRequestオブジェクトが...
-
addEventListener()でリスナー...
-
drawImageの描画順序の指定につ...
-
javascript(jQuery)でセル内...
おすすめ情報
外部リンクのバナーなどがあるので、指定した要素にのみ適用させたいです。
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が動作しました。