jquery 基于data-* 属性显示和隐藏元素

vaqhlq81  于 2023-06-22  发布在  jQuery
关注(0)|答案(4)|浏览(195)

这看起来对JQuery来说应该是微不足道的,但是这个函数隐藏了整个表单...谁能给我指个路吗?

$('form')
        .children()
        .filter(function(){
            return $(this).data('show', 'pro')
        })
        .show();
$('form')
         .children()
         .filter(function(){
             return $(this).data('show', 'home')
         })
         .hide();
qlckcl4x

qlckcl4x1#

您向data method传递了2个参数,从而设置了它,而不是检索旧值。
使用这个代替:

$('form')
        .children()
        .filter(function(){
            return $(this).data('show') === 'pro';
        })
        .show();
$('form')
         .children()
         .filter(function(){
             return $(this).data('show') === 'home';
         })
         .hide();

您也可以缓存选择器以提高性能(或使用end)。

mwkjh3gx

mwkjh3gx2#

如果data-show值在HTML中或设置为每个对象的属性,则可以完全使用选择器来完成此操作:

$('form > [data-show="pro"]').show();
$('form > [data-show="home"]').hide();

作为解释:

  • form显然选择表单元素
  • >选择表单对象的子对象
  • [data-show="pro"]仅选择具有名为data-show的属性且该属性的值设置为"pro"的子级
  • .show()对这些选定对象调用show方法

如果你的data-show值是用.data() jquery方法设置的,那么前面的方法就不起作用了,那么你最好把state设置为类名,而不是在选择器中更容易使用的数据值。如果将这些值设置为类名而不是数据,则代码将如下所示:

$('form > .pro').show();
$('form > .home').hide();

记住,你可以在一个对象上有多个类名,并且直接用于控制对象的呈现(CSS样式,可见性,格式等)的对象状态更好地表示为类名而不是data-xxx属性,因为它更容易在CSS或jQuery操作的选择器中使用。

lmyy7pcs

lmyy7pcs3#

不太确定你想从代码中做什么。
要使用JQ访问“data-”,我用途:

$(elementSelector).attr('data-XXX');

其中,data-XXX是标签的属性。这适用于所有浏览器回到IE7,我见过。

7hiiyaii

7hiiyaii4#

如果使用多个单词,如data-aliases="foo bar baz",并且多个单词中的一个必须匹配,则使用此选择器[data-aliases~=foo],用 alias 变量替换 foo

var alias = 'foo'; // get alias somehow
$('.selector[data-aliases~="'+alias+'"]').show();

相关问题