使用父类并获得子类

时间:2017-02-08 15:51:29

标签: javascript jquery joomla subform

我正在使用Joomla的新SubForm代码。这允许用户复制一组输入并重复使用它们。基本上是一种可重复的形式。 此表单创建以下结构。

<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将其视为一个独立的表单。因此,正常的显示/隐藏功能不再起作用。所以我必须创建自己的。

我得到了什么,有什么不好

这是生成的选择:

<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');

现在我可以为每个元素进行一次手动添加,如下所示:

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

但必须有更好的方法。

我想要什么。

  1. 我想在.hide()类中包含以下字母/符号的每个项目上使用__dc_函数,并将其作为.parents(.subform-repeatable-group)
  2. 一些额外信息

    1. 还有另一个主题没有__dc_但被称为__threed_所以我必须能够定义字母/符号。
    2. 我已经检查过我是否可以使用前面X位置的东西或后面X位置的东西,但这种情况会不断变化。
    3. 感谢大家的帮助。

      像往常一样,每当我得到更多结果时,我都会继续搜索和更新这篇文章。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

你的问题有点令人费解,所以我专注于你想要的东西。

假设您无法控制Joomla在那里抛出的类,无论您需要构建一种捕获父类和您正在寻找的子子字符串的方法。但假设你有这两个,你可以使节目隐藏一点通用。你总是可以告诉jQ寻找父母中有子串的孩子。

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

你的小提琴:https://jsfiddle.net/dvdxt58f/1/

答案 2 :(得分: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/