2012-01-19 4 views
10

Sto provando a creare una finestra di dialogo jQueryUI e inserirla nella dom all'interno di un elemento specifico. Abbiamo una sezione di contenuto che è l'elemento principale di un numero di stili, quindi gli elementi all'interno della finestra di dialogo non sono in stile poiché jqueryUI esegue un'appendice al corpo. C'è un modo per dire a jQueryUI di aggiungere un selettore di mia scelta?Controllo della posizione DOM di una finestra di dialogo dell'interfaccia utente jquery

Ciò che fa

<section id="content"> 
</section> 
<div class="dialog"> the dialog </div> 

quello che voglio

<section id="content"> 
<div class="dialog"> the dialog </div> 
</section> 
+0

$ ("selector".) Finestra di dialogo ({appendTo: "#someElem"}).; è quello che stai cercando ... vedi la mia risposta qui sotto. – testing123

risposta

13

So che questo la domanda è un po 'vecchia ma volevo assicurarmi che tutti i nuovi arrivati ​​fossero puntati nella giusta direzione. L'opzione "appendTo" è stata aggiunta nella versione 1.10.0.

$(".selector").dialog({ appendTo: "#someElem" }); 

Si può leggere su di esso here

+0

Soluzione molto accurata, mi hai risparmiato un sacco di refactoring del codice. –

-1

È possibile utilizzare il metodo di jQuery append.

$('#content').append('<div class="dialog"> the dialog </div>'); 
+0

Non penso che tu capisca cosa sta succedendo qui. quando chiami $ ('# mydialog'). dialog() jquery clona il tuo contenuto per creare un nuovo div poi lo aggiunge al 'body' rompendo la cascata – dstarh

+0

Se è quello che vuoi, puoi memorizzare un riferimento al genitore precedente della finestra di dialogo quando si crea la finestra di dialogo e si chiude nuovamente la finestra di dialogo. – rahool

+0

non si tratta di quando la finestra di dialogo si chiude, è il fatto che ha il genitore sbagliato quando si apre. – dstarh

1

This link forse di qualche utilità.
Ma la cosa che vorresti ottenere mi sembra un po 'contraria al modello della libreria di jQuery UI. È possibile ridimensionare la finestra di dialogo utilizzando le classi CSS specificate nella scheda Tema su this page.
Se è possibile trasferire l'id dell'elemento, si vuole fare in una finestra di dialogo, a una classe, è possibile utilizzare il seguente codice

$(".dialog").dialog({ dialogClass: 'content' }); 

e si dovrebbe aggiornare il CSS per riflettere il cambiamento. Così non si introducono duplicato id-s (che può portare a problemi nel lavoro futuro e è semanticamente corretto), se si duplica il tag #content all'interno della finestra di contenuti

+0

non è la finestra di dialogo che voglio stile, sono i campi del modulo, le sezioni, le etichette, i fieldet ecc all'interno della finestra di dialogo che voglio modellare e in questo momento sono impostati come #content fieldset label {styles} ma poiché jqueryUI aggiunge il dom elemento che crea sul corpo non è più "sotto" #contenuto e gli stili non sono in cascata correttamente – dstarh

+0

Sì, questo è ciò che intendevo, puoi cambiare il contenuto di # # in '.ui-dialog-content' e questo funzionerà. Se ci sono insiemi di campi in #content, che dovrebbero essere in stile allo stesso modo di quelli mostrati nella finestra di dialogo, puoi sempre fare qualcosa come "#content fieldset label, .ui-dialog-content fieldset label {styles}' –

+0

tutto sommato ci sono circa 30 o 40 stili che escono a cascata da #content e preferirei non dover ripetere tutto per nidificare sotto .ui-dialog-content come questo ", .ui-dialog-content form fieldset input" ecc. – dstarh

6

Da Custom CSS scope and jQuery UI dialog themes

// Create the dialog, but don't open it yet 
var d = $('#myDialogContents').dialog({ 
    autoOpen: false 
    // other dialog options 
}); 
// Take whole dialog and put it back into the custom scope 
d.parent('.ui-dialog').appendTo('.myCustomScope'); 
// Open the dialog (if you want autoOpen) 
d.dialog('open'); 
+0

Nota che se '.myCustomScope' ha un overflow:' impostato su auto, hidden o scroll, la finestra di dialogo sarà influenzata dal momento che è figlio di quell'elemento. –

+0

Accettare la risposta più recente poiché ora è una soluzione migliore – dstarh