2010-01-06 2 views
0

Intéressé de savoir si je peux utiliser jQuery pour trouver la première image sur la page et l'afficher à l'intérieur d'un redimensionné à une vignette avec cliquer pour agrandir. Par exemple, sur ce blog particulier, lorsque le client ajoute une image à la publication, jQuery trouve la première image et l'affiche sous la forme d'une vignette cliquable dans un emplacement particulier. Ce serait idéal si l'image détaillée pouvait s'afficher dans thickbox, facebox ou dans une autre fenêtre jQuery overlay.afficher la 1ère image à l'intérieur de l'ID

Merci d'avance pour vos idées. Jackson

Répondre

2

Vous pouvez utiliser le sélecteur :first pour trouver la première image, puis en utilisant le clonage, vous pouvez copier l'image à un autre emplacement et la modifier à partir de là.

$(document).ready(function() { 

    var firstImage = $('img:first'); 
    var link = $('<a />') 
        .attr('href', '#') 
        .append($('img:first').clone().css({ width:100, height:100 })) 
        .append($('<div />').text('Click to Enlarge')) 
        .click(function(e) { 
         e.preventDefault(); 
         // showDialog(); 
        }); 
    $('.imageThumbnail').append(link); 

    $('.imageDialog').append(firstImage.clone()); 

}); 
+0

Est-ce que le clonage ne serait pas un peu excessif (surtout lorsqu'il est fait deux fois) alors que tout ce qui est en train de persister est le src de l'image? – Ariel

+0

vous ne faites que cloner le code HTML. À mon humble avis l'impact serait minime – bendewey

1

Pour trouver la première image de votre page, vous pouvez utiliser le sélecteur :first.

$("img:first") sélectionnera le premier élément img.

Si vous souhaitez restreindre la recherche dans un élément parent, vous pouvez

$("#parentElemId").find("img:first") 

Si vous pouvez donner ces éléments d'image alors un nom de classe que vous pouvez faire

$("img.classname:first") 
+1

lors de la restriction en utilisant la deuxième option pourquoi ne pas utiliser '#parentElemId img: first' ou' #parentElemId> img: first'? – bendewey

+0

Bon point bendeway. $ ("# parentid img: first") est beaucoup plus propre. – Ariel

+0

La méthode fournie par @pulse montre une optimisation utile si vous envisagez de faire autre chose avec le nœud parent. Par exemple, 'var n = $ (" # parentElemId "); ... n.find ("img: first"); –

1

Comme les autres membres ont mentionné, vous pouvez obtenir la première image en utilisant img: d'abord. La manière d'afficher la plus simple comme une vignette serait:

$(document).append("<img src='" + $("img:first").attr("src") + "' alt='' class='thickbox' style='width: 50px; height: 50px;' />"); 

La partie class='thickbox' est pour le plug-in thickbox

Voici un exemple plus spécifique en fonction de votre commentaire:

Si les regards de données d'origine quelque chose comme ceci:

<div id="thumbs"></div> 
<div id="article"> 
    <img src="..." alt="" /> 
    Some text.. 
</div> 

Vous pouvez utiliser quelque chose comme ceci:

var images = ""; 

$("#article img:first").each(function() { 
    images += "<img src='" + $(this).attr('src') + "' width='45' class='thickbox' alt='Click to enlarge' /> "; 
}); 

$("#thumbs").append(images); 
+0

Désolé pour mon ignorance mais je ne peux pas voir à partir de votre code où l'image serait ajoutée? – Jackson

+0

Dans l'exemple, l'image sera simplement ajoutée au document, ce qui signifie qu'elle apparaîtra en premier. Vous pouvez facilement changer cela en remplaçant le document par un sélecteur valide pour l'élément parent – Ariel

+0

Merci Ariel. Je vais l'utiliser sur un blog avec plusieurs intro d'article. Chaque intro d'article contiendra une image:

Contenu ici
. Étant nouveau pour jQuery, il est difficile pour moi de voir comment j'utiliserais votre code pour trouver les images dans chaque intro de la page et ajouter au .thumbcontainer de chaque intro pour que chaque intro ait une vignette. Merci d'avance pour votre aide. – Jackson

Questions connexes