2017-02-08 13 views
0

Я работаю с новым кодом SubForm от Joomla. Это позволяет пользователю дублировать набор входов и повторно использовать их. В принципе повторяемая форма. Эта форма создает следующую структуру.Используйте родительский класс и получите среднюю часть дочернего класса

<div class="subform-repeatable-group"> 
    <div class="control-group jform_params__content__content0__dc_subheader-cg"></div> 
    <div class="control-group jform_params__content__content0__dc_typeofcontent-cg"></div> 
    <div class="control-group jform_params__content__content0__dc_toc_image-cg"></div> 
</div> 

Проблема в том, что SubForm загружается внутри родительской формы, но Joomla рассматривает ее как независимую форму. Поэтому нормальные функции Show/Hide больше не работают. Поэтому я должен создать свою собственную.

Что я и то, что не является хорошим

Это генерируемый Select:

<select id="jform_params_theme_selection" name="jform[params][theme_selection]" class="chzn-done"> 
    <option value="3dperspective" selected="selected">3D Perspective</option> 
    <option value="default">Default</option> 
    <option value="notheme">Select a theme!</option> 
</select> 

Я уже получил кусок кода, который будет проверять, если выбран выберите значение на родительской форме ,

$('#jform_params_theme_selection').bind('change', function (e) { 
    if($('#jform_params_theme_selection').val() == 'notheme') { 
    } else if($('#jform_params_theme_selection').val() == 'default') { 
    } else if($('#jform_params_theme_selection').val() == '3dperspective') { 
    } 
}).trigger('change'); 

Теперь я могу Offcourse для каждого элемента добавить его вручную, как это:

$('[class$="__dc_typeofcontent-cg"]').hide(); 

Но должно быть лучше.

Что я хочу.

  1. Я хочу использовать функцию .hide() на каждый элемент, который имеет в своем классе __dc_ следующие буквы/символы и имеет в качестве .parents(.subform-repeatable-group)

бит дополнительной информации

  1. Существует другой тема, которая не имеет __dc_, но называется __threed_, поэтому я должен уметь определять буквы/символы.
  2. Я уже проверил, могу ли я что-то использовать с X количеством позиций спереди или X позиций со спины, но это постоянно меняется.

Спасибо всем за помощь.

Как обычно, я буду продолжать поиск и обновление этого сообщения всякий раз, когда получаю больше результатов.

+1

Пожалуйста обеспечивают [mcve]. Нет элементов управления формой, показывающих, что событие изменения будет работать или будет иметь значение – charlietfl

+0

@charlietfl Я добавил, что выберите, но я не считаю, что это так важно. Поскольку функция изменения уже работает, мне просто нужен лучший способ скрытия/отображения большого количества «контрольных групп», поскольку они вызывается в Joomla. И мне это нужно в сочетании с родительским классом, чтобы он не скрывал элементы на других вкладках. Я не могу загрузить весь код, потому что, если я это сделаю, я на 100% уверен, что следующий комментарий будет состоять только в том, чтобы загружать коды, которые точно определяют проблему. – purple11111

ответ

1

Может использовать filter() что-то вроде:

var cGroups = $('.subform-repeatable-group .control-group'); 

    var hideTheme = '_dc'; 
    var showTheme = '_threed'; 

    cGroups.filter(function(){ 
    return this.className.indexOf(hideTheme)>-1 
    }).hide() 



    cGroups.filter(function(){ 
    return this.className.indexOf(showTheme)>-1 
    }).show() 

DEMO

+0

Разве это не требует, чтобы я добавлял это для каждого входа. Разве нет способа сделать это без '_typeofcontent-cg'? Для этой темы имеется более 100 входов. Будет ли эта работа: $ ('. Subform-repeatable-group [class $ = "' + theme + '"]'). Each(). Hide(); – purple11111

+0

Не без больше html показано в соответствии с [mcve]. * «Будет ли это работать» * ... вы попробовали? – charlietfl

+0

Какой еще HTML-код вам нужен? Скажите, пожалуйста, как я не понимаю, что вам сейчас не хватает? – purple11111

0

Ваш вопрос немного запутанным, поэтому я сосредоточился на то, что вы хотите часть.

Предполагая, что у вас нет большого контроля над классами, которые Joomla выбрасывает там, независимо от того, что вам понадобится, чтобы создать способ захвата родительского класса и дочерней строки, которую вы ищете. Но, предполагая, что у вас есть оба из них, вы можете заставить шоу скрыть несколько общих. Вы всегда можете указать jQ для поиска дочерних элементов с подстрокой внутри родителя.

$("[class*='"+searchclass+"']",parent) 

скрипку для вас: https://jsfiddle.net/dvdxt58f/1/

0

Наиболее эффективным способом является один предложенный charlietfl, но есть еще один способ решить эту проблему.

(function ($) { 
    $(document).ready(function() { 

     $('#jform_params_theme_selection').bind('change', function (e) { 
     if($('#jform_params_theme_selection').val() == 'notheme') { 
     } else if($('#jform_params_theme_selection').val() == 'default') { 

     $(".subform-repeatable-group div[class*='__threed_']").hide(); 
     $(".subform-repeatable-group div[class*='__dc_']").show();   

     } else if($('#jform_params_theme_selection').val() == '3dperspective') { 

     $(".subform-repeatable-group div[class*='__threed_']").show(); 
     $(".subform-repeatable-group div[class*='__dc_']").hide();   

     } 
    }).trigger('change'); 

    }); 
})(jQuery);  

В основном используется селектор * и что вы создаете:

$(".subform-repeatable-group div[class*='__threed_']").hide();

Я добавил этот один, как это может быть полезно в некоторых случаях, даже когда я иду с ответом charlietfl в.

Демо: https://jsfiddle.net/tdo9go2q/11/