Есть ли способ заставить jQuery [UI] сделать диалог на месте? Или легко переместить его и заставить его работать?
Панель YUI2 дала вам свободу сделать это, предполагая, что вы знаете, что делаете, и оставили разметку именно там, где вы ее положили.
Но теперь, когда я перешел к использованию более простого jQuery, я заметил ограничение; Пользовательский интерфейс jQuery, похоже, только делает диалоги непосредственно под body
.
Рассмотрим этот пример;
Предположим, что вы хотите использовать divs как способ смены имен css.
Напишите таблицу стилей, относящуюся к функции, префикс всех селекторов с .className
и разметку внутри div с class="className"
.
Some
<div class="sectiona">
<div class="popup" title="A popup">
This text should be <span class="emphasis">blue</span>
</div>
</div>
irrelevant
<div class="sectionb">
<div class="popup" title="B popup">
This text should be <span class="emphasis">red</span>
</div>
</div>
content
<script>$(function() { $('.popup').dialog(); });</script>
.emphasis {
color : yellow;
}
.sectiona .emphasis {
color : blue;
}
.sectionb .emphasis {
color : red;
}
Всплывающие .popup
(.popup
) будут перемещены в тело, потеряв все css! (очевидно, будет более сложным в реальной жизни). Поскольку все диалоги/панели позиционируются абсолютно, а те, которые я хочу, чтобы они содержали, имеют статическую позицию и являются дочерними элементами тела, и это не имело бы никакого значения, чтобы сохранить их там.
Не принимайте эту технику пространства имен CSS (если это даже правильная формулировка) как единственная причина для этого, я уверен, что есть другие варианты использования
Существует опция appendTo
, вам нужно указать ее для каждого отдельного всплывающего окна:
// HTML
// added a common "section" class to your divs
Some
<div class="section sectiona">
<div class="popup" title="A popup">This text should be <span class="emphasis">blue</span>
</div>
</div>
irrelevant
<div class="section sectionb">
<div class="popup" title="B popup">This text should be <span class="emphasis">red</span>
</div>
</div>
content
// javascript
$('.section').each(function () {
$(this).find('.popup').dialog({
appendTo: this
});
});