Newsgroup: it.comp.lang.javascript
Titolo: [JQUERY] Selezionare tutti gli elementi

Ciao a tutti, espongo velocemente il mio problema:
In una pagina io ho occorrenze multiple di:
[code]
	<div id="images">
		<div id="imagencap" style="float:left;">
			<img src="nomedelFile.jpg" alt="altdelfile" style="border:1px
dotted;margin-right:10px;" />
			<p id="id_descrizione">
			descrizione_Dell'Immagine
			</p>
		</div>
	</div>
[/code]
Vorrei fare in modo, che quando si clicca su
"descrizione_Dell'Immagine" il <p> venga sostituito con una textarea
editabile, con all'interno il contenuto che apparteneva al <p>.
Di conseguenza, ho creato questo javascript:
[code]
	$("#images").find("#imagencap")
	.click(function(e){
		if($(this).children().is("textarea")){ return; }
		var myP = $(this).find("p");
		var myCaption = myP.text();
		var myId = myP.attr("id");
		var textarea = "<textarea id="+myId+">"+myCaption+"</textarea>";
		var buttons = "[<a href='#'>SAVE</a>] [<a href='#'>CANCEL</a>]";
		myP.hide();
		myP.before("<br />"+textarea+"<br />"+buttons);
	});
[/code]
... che funziona. Mi crea la textarea e mi nasconde il <p>. MA,
funziona solo con la prima occorrenza della pagina. Le altre vengono
tralasciate!
Come posso fare?
Grazie mille!

 Come posso fare?
La cosa più veloce per te, ma non altrettanto per il browser, fintanto
che non verranno implementate in modo nativo le API dei selettori CSS,
è andare a sostituire gli id con delle classi:
        <div class="images">
                <div class="imagencap">
                        .. etc..
                </div>
        </div>
E nei selettori CSS, invece di fare "#images" farai ".images", etc. Ma
ricorda che anche gli ID che assegni a tag creati dinamicamente devono
essere univoci (se li vuoi assegnare), vedasi la textarea.
-- 
"Se c'è qualcosa di più importante del mio ego su questa nave,
la voglio catturata e fucilata."

 Quindi, puoi avere un solo div con id "images", "imagencap", etc.
quoto, e sottolineo che anche per una sola occorrenza e' formalmente errato
assegnare alla textarea l'id del paragrafo (vedi sopra).
-- 
Increased cost of life? Eat plasma panels!


Grazie mille per la pronta risposta, in effetti è stato proprio un
errore da niubbo... :P
Mi permetto un'altra domanda, se possibile:
Partiamo da questo codice
-----------------
	$(".imagencap").bind("click", function(){
		//if($(this).children().is("textarea")){ return; } //return if
textarea is already created
		var myP = $(this).find("p");
		var myCaption = myP.text();
		var myId = myP.attr("id");
		//alert(myId+": "+myCaption);
		var textarea = "<textarea id="+myId+" cols='9' rows='9'>"+myCaption
+"</textarea>";
		var buttons = "<span class='savencancel'>[<a href='#save'>SAVE</a>]
[<a href='#cancel'>CANCEL</a>]</span>";
		myP.hide();
		myP.before("<br /><br />"+textarea+""+buttons);
		$(this).find("span").find("a").bind("click", function(e){
    		e.preventDefault();
    		if($(this).attr("href") == "#save"){
    			//alert("salvo!");
    		}
    		if($(this).attr("href") == "#cancel"){
    			//alert("cancello!");
    			$(this).parent().hide("slow");
    			$
(this).parents(".imagencap").children("textarea").hide("slow");
    			//$(this).parents(".imagencap").children("textarea").remove();
    			$(this).parents(".imagencap").find("p").show();
    		}
    	});
	});
---------------------------
Come si può evincere dallo script, in fondo alla textarea ci sono un
link SAVE e uno CANCEL. Se si clicca quest'ultimo, la textarea viene
nascosta insieme al pulsante.
Il problema è che cliccando su cancel, mi prende il click anche nel
div e quindi se rimuovo la textarea, me ne ricrea subito un'altra; se
la nascondo solamente, invece, non mi permette più di modificare il
testo una seconda volta, dato che trova già la textarea.
Qualche idea? Grazie mille!

 editabile, con all'interno il contenuto che apparteneva al <p>.
http://plugins.jquery.com/project/akeditable
Saluti. Carlo.
-- 
Puoi chiamarmi con Skype, il mio id e' carlonike
Vuoi un sicuro e gratuito programma per la tua posta?
http://www.pegasusmail.tk
 o 
http://www.pmail.com

 div e quindi se rimuovo la textarea, me ne ricrea subito un'altra;
Evita la propagazione degli eventi. Il primo click lo hai comunque sul
tag A, lo intercetti ed eviti di passarlo al tag DIV. Non uso JQuery e
quindi non so come gestisce il blocco della propagazione, ma penso che
ti basti un semplice "return false" nella funzione che associ al click
del tag A, quando non vuoi che l'evento venga propagato.
Se cosě non fosse, dai una sbirciata alla documentazione di JQuery. :)
-- 
"Se c'č qualcosa di piů importante del mio ego su questa nave,


 ti basti un semplice "return false" nella funzione che associ al click
esattamente
-- 
Local candidates only, no relocation