Я немного застрял в этом - я использую шорткод Wordpress с плагином для модального наложения, чтобы вставить несколько наложений в редактор содержимого.Тем не менее, я стараюсь не повторять мой код jQuery несколько раз для каждого идентификатора.
Как вы можете видеть в шорткоде, я могу установить идентификатор наложения в редакторе Wordpress следующим образом:
Шорткод
[osu_overlay linktext="Text for link" oid="1"] ... content for overlay ... [/osu_overlay]
Это создает следующую разметку HTML:
HTML
<a id="overlaylink-1" class="overlaybox" rel="overlaybox-1" href="javascript:void(0);">Text for link</a>
<div id="overlaybox-1" class="overlaybox" style="display:none;"> ... content for overlay ...</div>
Это jQueryЯ не хочу повторять для каждого идентификатора, т.е. для оверлейной ссылки-1, оверлейной связи-2 и т. Д.
jQuery
// Check if .overlaylink exists first
if($("#overlaylink-1").length == 0) {
// #overlay-link-1 doesn't exist
} else {
// Start overlay
$('#overlaylink-1').click(function(){
function dialogFadeIn() {
dialogFadeIn.data.fadeIn('slow');
}
$("#overlaybox-1").modal({
persist: true,
onOpen: function(dialog) {
dialog.overlay.fadeIn('medium', function () {
dialog.data.hide();
dialog.container.show()
dialog.data.fadeIn('medium');
});
}
});
});
}
Есть ли способписать код jQuery выше, чтобы он учитывал все идентификаторы, т.е. «overlaylink-x» и overlaybox-x », где x - любое число?
Спасибо за любую помощь
Osu
- * - РЕДАКТИРОВАТЬ - * -
Вот окончательный код jQuery - я обновилHTML и Shortcode также включают rel = "", который необходим для работы этого кода плагина jQuery.Спасибо @DingoEatingFuzz за это решение (ниже).
Новый jQuery
// Check if .overlaylink exists first
if($(".overlaylink").length == 0) {
// nada bc doesn't exist
} else {
// Get Box to overlay from link rel
var link = $('overlay-link-1'),
box = $('#' + link.attr('rel'));
// Plugin for showing overlay
(function($) {
$.fn.osuModal = function(options) {
// $.fn is the jQuery plugin object
// make sure to loop in case the selector specified returns more than one object
// make sure to return to support function chaining
return this.each(function() {
var $this = $(this);
$this.click(function() {
function dialogFadeIn() {
dialogFadeIn.data.fadeIn('slow');
}
$('#' + $this.attr('rel')).modal({
persist: true,
onOpen: function(dialog) {
dialog.overlay.fadeIn('medium', function() {
dialog.data.hide();
dialog.container.show();
dialog.data.fadeIn('medium');
});
}
});
}); // End '$this.click(function()'
}); // End 'return this.each(function()'
}
})(jQuery);
// Run the plugin
$('.overlaylink').osuModal();
}
WP Shortcode PHP
Thisв случае, если кто-то хочет сделать то же самое в Wordpress (вы помещаете это в свой файл functions.php):
// Shortcode for overlays
function osu_overlay($atts, $content = null) {
extract(shortcode_atts(array('linktext' => '#', 'oid' => '#'), $atts));
return '<a class="overlaylink" id="overlaylink-' . $oid . '" rel="overlaybox-' . $oid . '" href="javascript:void(0);">' . $linktext . '</a><div class="overlaybox" id="overlaybox-' . $oid . '" style="display:none;">' . do_shortcode($content) . '</div>';
}
add_shortcode('osu_overlay', 'osu_overlay');