【问题标题】:How to hide all elements with a specific attribute set?如何隐藏具有特定属性集的所有元素?
【发布时间】:2011-10-14 16:13:27
【问题描述】:

我有一系列项目通过来自 php 文档的 ajax 请求插入到我的 html 文档中。返回的数据由一堆设置了自定义属性的 div 元素组成,这样我就可以知道哪些 div 元素属于已返回的项目类别。我希望能够单击类别名称并隐藏所有具有自定义属性(设置为类别名称)的元素。

样品返回

<div class="row">
   <div class="category" categoryID="category_1">
      category_1
      <div categoryID="category_1">item 1</div>
      <div categoryID="category_1">item 2</div>
      <div categoryID="category_1">item 3</div>
   </div>
   <div class="category" categoryID="category_2">
      category_2
      <div categoryID="category_2">item 1</div>
      <div categoryID="category_2">item 2</div>
      <div categoryID="category_2">item 3</div>
   </div>
   <div class="category" categoryID="category_3">
      category_3
      <div categoryID="category_3">item 1</div>
      <div categoryID="category_3">item 2</div>
      <div categoryID="category_3">item 3</div>
   </div>
</div>

<div class="row">
   <div class="category" categoryID="category_1">
      category_1
      <div categoryID="category_1">item 1</div>
      <div categoryID="category_1">item 2</div>
      <div categoryID="category_1">item 3</div>
   </div>
   <div class="category" categoryID="category_2">
      category_2
      <div categoryID="category_2">item 1</div>
      <div categoryID="category_2">item 2</div>
      <div categoryID="category_2">item 3</div>
   </div>
   <div class="category" categoryID="category_3">
      category_3
      <div categoryID="category_3">item 1</div>
      <div categoryID="category_3">item 2</div>
      <div categoryID="category_3">item 3</div>
   </div>
</div>

我正在使用 jquery 来处理大部分 javascript 函数,因此在处理动态添加到 dom 的数据时,我自然会使用如下代码。

$(".skillCategory").live({
        mouseenter:
           function(){
               $(this).css('background-color', 'white');
           },
        mouseleave:
           function(){
               $(this).css('background-color', '#393939');
           }
       });
    $(".skillCategory").live('click',function(){
        var title = $(".skillCategory").attr("categoryID");

        });
});

我试图能够隐藏一个类别以及属于它的所有项目,由“categoryID”属性确定。

感谢您的时间和帮助。

【问题讨论】:

  • 我找不到 SkillCategory 类是什么。

标签: jquery select attributes hide live


【解决方案1】:

您可以格式化您的 HTML 以使用新的“数据属性”表示法:

<div class="category" data-categoryID="category_3">

那么你可以这样做:

$(".category").click(function() {
  var ctx = $(this);
  $(".category").each(function(item) {
    if($(this).data("categoryID") != ctx.data("categoryID") {
      $(this).hide();
    }
  });
});

【讨论】:

  • 大多数浏览器都支持这个吗?
  • $(".skillCategory").live('click', function() { var ctx = $(this); console.log(ctx); $(".skillCategory").each(function(item) { console.log("first: "); console.log($(this).data("categoryID")); console.log("Seccond: "); console.log(ctx.data("categoryID")); if($(this).data("categoryID") != ctx.data("categoryID")) { $(this).hide(); } }); }); 第一个日志按预期显示了所有不同的类别。其他的产生未定义的变量。
【解决方案2】:

这会为你做的:

http://jsfiddle.net/J6PRM/

希望对你有帮助。

【讨论】:

  • 这很好,但我遇到的问题是,当动态添加内容时,您必须使用 .live。我会看看我是否可以修改你那里的内容,看看我是否可以让它工作。谢谢你的建议。
【解决方案3】:

如果我正确理解你的问题,这样的事情应该可以工作:

$(".category").live('click',function(){
       var category = $(this).attr("categoryID");
       $("[categoryID=" + category + "]").not('.category').hide();
    });

【讨论】:

  • 在第一部分你有 $(".category") .category 是通过使用上面显示的最后一段代码发现的,现在在下面$(".skillCategory").live('click',function(){ var title = $(".skillCategory").attr("categoryID"); }); 问题是当我尝试使用 title 变量代替您的 .category 它似乎不起作用。我如何动态地做到这一点?
  • @wes,你能发布完整的 html,我会修改代码。你的例子不包括 ,.skillCategory 我不得不使用 .category
  • 这就像一个魅力。我不确定我做错了什么,但你的解决方案写得很好。谢谢。
  • 如果有人读到此内容并想知道,请将 .hide() 替换为 .toggle()
【解决方案4】:

尝试使用 jquery 属性选择器:http://api.jquery.com/attribute-equals-selector/

您应该将其与其他内容结合使用以避免隐藏主 div,例如 ":not(.skillCategory)" 或类似内容。

【讨论】:

  • 我在选择动态内容中的项目时没有问题,当尝试隔离“categoryID”然后隐藏所有具有该属性的元素时出现问题。
  • 这是使用属性选择器完成的,它将找到具有给定类别 ID 的所有其他元素,以便您可以隐藏它们,就像 Emil 在他的回答中所做的那样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-22
  • 2015-02-09
  • 1970-01-01
  • 2014-03-28
  • 2018-07-04
  • 1970-01-01
  • 2016-06-25
相关资源
最近更新 更多