2012-01-19 6 views
10

Estoy tratando de crear un cuadro de diálogo jQueryUI y hacer que se inserte en el dom dentro de un elemento específico. Tenemos una sección de contenido que es el elemento principal de una serie de estilos para que los elementos del cuadro de diálogo no tengan un estilo, ya que jqueryUI hace un apéndice al cuerpo. ¿Hay alguna manera de decirle a jqueryUI que se añada a un selector de mi elección?Controlar la ubicación DOM de un diálogo de la interfaz de usuario de jquery

Lo que hace

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

lo que quiero

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

$ ("selector.") De diálogo ({appendTo: "#someElem"}).; es lo que estás buscando ... ver mi respuesta a continuación. – testing123

Respuesta

13

Sé que esto La pregunta es un poco vieja, pero quería asegurarme de que cualquier nuevo candidato sea apuntado en la dirección correcta. La opción "appendTo" se agregó en la versión 1.10.0.

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

Usted puede leer sobre él here

+0

Solución muy ordenada que me ha ahorrado una gran cantidad de código posible de refactorización. –

-1

puede utilizar el método de jQuery append.

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

No creo que entiendas lo que está pasando aquí. cuando llamas $ ('# mydialog'). dialog() jquery clona tu contenido para construir un nuevo div y luego lo agrega a 'body' rompiendo así la cascada – dstarh

+0

Si eso es lo que quieres, puedes almacenar una referencia al padre anterior del diálogo cuando crea el diálogo, y mueve el diálogo de nuevo al cerrar. – rahool

+0

no se trata de cuándo se cierra el cuadro de diálogo, es el hecho de que tiene el padre incorrecto cuando se abre. – dstarh

1

This link Quizás de algún uso.
Pero lo que le gustaría lograr me parece un poco en contra del modelo de la biblioteca jQuery UI. Puede aplicar estilos al diálogo utilizando las clases de CSS especificadas en la pestaña Tema en this page.
Si puede transmitir el ID del elemento, que desea convertir en un cuadro de diálogo, a una clase, puede utilizar el siguiente código

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

y se debería actualizar el CSS para reflejar el cambio. Por lo tanto no se introducen duplicado id-s (que puede conducir a problemas en el trabajo futuro y es semánticamente incorrecto), si se duplica la etiqueta #content dentro del contenido de diálogo

+0

no es el diálogo que quiero diseñar, son los campos de formulario, secciones, etiquetas, conjuntos de campos, etc., que quiero diseñar en el diálogo y ahora están configurados como #content fieldset label {styles}, pero como jqueryUI agrega la dom elemento que crea en el cuerpo ya no está "bajo" # contenido y los estilos no se conectan en cascada correctamente – dstarh

+0

Sí, eso es lo que quise decir, puede cambiar '# content' por' .ui-dialog-content' y esto funcionará. Si hay conjuntos de campos en #contenido, que se deben diseñar de la misma manera que los que se muestran en el cuadro de diálogo, siempre se puede hacer algo como '#content fieldset label, .ui-dialog-content fieldset label {styles}' –

+0

en general hay alrededor de 30 o 40 estilos que entran en cascada desde #content y prefiero no tener que repetir todo para también anidar en .ui-dialog-content como este ", .ui-dialog-content form fieldset section input" etc – dstarh

6

De 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

Tenga en cuenta que si '.myCustomScope' tiene' overflow: 'establecido en automático, oculto o desplazado, el cuadro de diálogo se verá afectado ya que es un elemento secundario de ese elemento. –

+0

Voy a aceptar la respuesta más reciente, ya que ahora es una solución mejor – dstarh

Cuestiones relacionadas