2012-03-18 5 views
0

fancyboxの起動に問題があります。 #contentブロック内のすべての画像にfancyboxを使用したいと思います。私は(写真はTinyMCEを介してユーザによって管理されている)リンクのための特別なクラスを使用したくない画像が入ったすべてのアンカータグにfancyboxを起動します

<a href="img.jpg"> 
<img title="title" src="img.jpg" alt="alt" width="225" height="169"> 
</a> 

:すべての画像は、次のコードを持っています。私が試した:

$("#content a").has('img').fancybox({ 
..fancybox settings 
}); 

と同様

$("#content a img").parent('a').fancybox({ 
..fancybox settings 
}); 

を任意の運なし。 $("#content a").has('img').hide()は完全に機能します。したがって、適切な要素を選択するだけで問題ありません。

EDIT:たぶん、より良い理解のために:$("#content a")作品を使用しますが、<a href="google.com">google</a>などもシンプルなリンクは「fancyboxed」であることを意味し、すべての<a>タグに動作します。

EDIT2: HTMLコード:任意のアイデアを

<div id="content"> 
<p>Lots of text. 
    <a href="href"> 
     <img src="src" alt="alt" width="225" height="169" /> 
    </a> 
</p> 
<p>another text</p> 
<p>more text <a href="http://www.google.com">Simple link which should not be opened by fancybox</a></p> 
</div> 

Thxを。

+0

をuはuが望むより多くのワットを説明することができますか? – Ghostman

+0

私はfancybox内のすべての画像を開きたいと思います。だから私は内部にイメージを持っているすべてのタグでfancyboxを有効にする必要があります。 – tsusanka

答えて

0

さて、私はついにそれを実現しました。 jQuery .has() Target Different Elementのおかげであなたのコードに長さ属性を追加しました。

$(document).ready(function() { 
    $('#content a').each(function() { 
    if ($(this).has('img').length) { 
     $(this).fancybox(); 
    } 
}); 

私は$('#content a').has('img').hide();が機能しなかった理由を私は知らないことを、言わなければなりません。できるだけコードを「きれいにする」と、効果がありました。私は問題を引き起こした要素を見つけることができませんでした。

-1
<a rel="example_group" href="img.jpg"> 
<img title="title" src="img.jpg" alt="alt" width="225" height="169"> 
</a> 


$("a[rel=example_group]").fancybox({ 
..fancybox settings 


}); 

または

$("#content a[rel=example_group]").fancybox({ 
..fancybox settings 


}); 

これは

+1

彼はクラスを使用したくないと見て、私はrel属性がそれより良いとは思わない。 – powerbuoy

+0

しかし、彼は自分の質問ごとにファンシーボックスを使ってすべての画像を開く必要があります – Ghostman

+0

あなたを混乱させて申し訳ありませんが、私は本当にイメージが共通のギャラリーにあるかどうか気にしないので、 – tsusanka

2

これを固定するためのrelを与える使用してみてくださいIDのコンテンツを持つdivの下にあるすべての画像をfancyboxを有効にする必要があります。

$("#content img").fancybox({ 
    ..fancybox settings 
    }); 

これは、コンテンツdiv内にイメージを持つすべてのタグにfancyboxを有効にする必要があります。

$("#content a").each(function(){ 
    if($(this).has("img")) 
    { 
     $(this).fancybox({ 
      //..fancybox settings 
     }); 
    } 
    }); 
+0

thxです。残念ながら、これは動作しません。 'fancybox'を' hide() '関数に置き換えると、すべてのタグが隠されます。私は自分のコードが本当に有効かどうかをチェックする必要があります。なぜならこれはちょっと変わっているからです。 – tsusanka

+0

それは有効であるように見える。 – tsusanka

5

$('a').has('img')それが動作しないことを本当に奇妙ですのでimgの要素を持っているすべてのaの要素を返す必要があります。どうすればいいですか:

$('a').each(function() { 
    if ($(this).has('img')) { 
     $(this).fancybox(); 
    } 
}); 
+0

あなたの答えのためのthx、私は詳細Shyjuのポストにコメントした。 – tsusanka

2

なぜそれらのリンクを直接ターゲットにしないのですか内容に画像が含まれている画像の代わりに画像にリンクしていますか? Fancyboxは大きな画像を表示するために必要なのでしょう。

簡単に行われます。

//build a selector that targets all links ending in an image extension 
var thumbnails = 'a[href$=".gif"],a[href$=".jpg"],a[href$=".jpeg"],a[href$=".png"],a[href$=".GIF"],a[href$=".JPG"],a[href$=".JPEG"],a[href$=".PNG"]'; 

//add "fancybox" class to those (this step could be skipped if you want) and group them under a same "rel" to enable previous/next buttons once in Fancybox 
jQuery(thumbnails).addClass("fancybox").attr("rel","lightbox"); 

//call fancybox 
jQuery('.fancybox').fancybox(); 
関連する問題