首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将属性添加到已过滤的div

将属性添加到已过滤的div
EN

Stack Overflow用户
提问于 2019-08-19 22:02:43
回答 3查看 48关注 0票数 1

代码语言:javascript
运行
复制
jQuery(document).ready(filter);

function filter() {
    jQuery(".my-divs").each(function () {
        jQuery(".my-divs div").filter(function () {
            jQuery(this).toggle(jQuery(this).text() <= 3);
        });
    });
 
    jQuery(".my-divs div").each(function () {
        if (jQuery(this).is(':visible')) {
            jQuery(this).attr('data-filtred', 'true');
        }
    });
}
代码语言:javascript
运行
复制
.my-divs div {
  display:block;
  padding:10px;
  border:1px solid #eaeaea;
}
代码语言:javascript
运行
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="1" class="my-divs">
    <div>1</div>
    <div>2</div>
    <div>3</div>
    <div>4</div>
    <div>5</div>
</div>
<hr></hr>
<div id="2" class="my-divs">
    <div>1</div>
    <div>2</div>
    <div>3</div>
    <div>4</div>
    <div>5</div>
</div>

我有一些函数通过切换来过滤tr div,所以我需要添加属性到切换后的div (可见的div)。

过滤器工作得很好,我只想将属性data-filtred="true"添加到可见的元素中

代码语言:javascript
运行
复制
function filter() 
    jQuery(".my-divs").each(function () {
        jQuery(".my-divs tr").filter(function () {
            jQuery(this).toggle((new Date(jQuery(this).find('td.date').data('basedate')).getTime() >= (from) && new Date(jQuery(this).find('td.date').data('basedate')).getTime() <= (to)));
        });
    });
}

我试过了,但不起作用

代码语言:javascript
运行
复制
function filter() 
    jQuery(".my-divs").each(function () {
        jQuery(".my-divs tr").filter(function () {
            jQuery(this).toggle((new Date(jQuery(this).find('td.date').data('basedate')).getTime() >= (from) && new Date(jQuery(this).find('td.date').data('basedate')).getTime() <= (to)));
        });
    });

    jQuery(".my-divs tr").each(function () {
        if (jQuery(this).is(':visible')) {
            jQuery(this).attr('data-filtred', 'true');
        }
    }
}
EN

回答 3

Stack Overflow用户

发布于 2019-08-20 04:21:38

您使用的过滤器是错误的。使用filter的正确方法是返回一个布尔值,这样它就可以改变jQuery集合。

代码语言:javascript
运行
复制
$(".my-divs div").filter( function () {
  return Number($(this).text()) < 3
}).hide()
代码语言:javascript
运行
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="1" class="my-divs">
    <div>1</div>
    <div>2</div>
    <div>3</div>
    <div>4</div>
    <div>5</div>
</div>
<hr>
<div id="2" class="my-divs">
    <div>1</div>
    <div>2</div>
    <div>3</div>
    <div>4</div>
    <div>5</div>
</div>

但是我不认为过滤器是最好的选择,因为你需要在两个集合上都做动作。所以使用each循环就可以了。

代码语言:javascript
运行
复制
$(".my-divs div").each( function () {
  var div = $(this)
  if (Number(div.text()) < 3) {
    div
      .removeAttr("data-filtred")
      .removeData("filtered")
      .hide()
  } else {
    div
      .setAttr("data-filtred", "true")
      .data("filtered", "true")
      .show()
  }
})
代码语言:javascript
运行
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="1" class="my-divs">
    <div>1</div>
    <div>2</div>
    <div>3</div>
    <div>4</div>
    <div>5</div>
</div>
<hr>
<div id="2" class="my-divs">
    <div>1</div>
    <div>2</div>
    <div>3</div>
    <div>4</div>
    <div>5</div>
</div>

票数 1
EN

Stack Overflow用户

发布于 2019-08-19 22:18:31

代码语言:javascript
运行
复制
function filter() 
    jQuery(".my-divs").each(function () {
        jQuery(".my-divs tr").filter(function () {
            jQuery(this).toggle((new Date(jQuery(this).find('td.date').data('basedate')).getTime() >= (from) && new Date(jQuery(this).find('td.date').data('basedate')).getTime() <= (to)));
        });
    });

    jQuery(".my-divs tr").each(function () {
        if (jQuery(this).is(':visible')) {
            **jQuery(".my-divs tr").removeAttr('data-filtred');**
            jQuery(this).attr('data-filtred', 'true');
        }
    }
}

票数 0
EN

Stack Overflow用户

发布于 2019-08-20 03:36:43

我不知道您希望如何使用data-*属性,但我知道如何处理某些情况。

首先,如果您需要添加/更改某些数据-*属性,可以使用.data()函数-如果需要删除,可以使用.removeData()

我稍微修改了你的代码,只是为了删除一些不必要的代码。它根据您的过滤条件将data-filtered设置为truefalse

代码语言:javascript
运行
复制
jQuery(document).ready(filter);

function filter() {
    jQuery(".my-divs div").each(function () {
        let el = jQuery(this);
        let filter = el.text() <= 3;
        el.data('filtered', filter);
        el.toggle(filter);
    });
}
代码语言:javascript
运行
复制
.my-divs div {
  display:block;
  padding:10px;
  border:1px solid #eaeaea;
}
代码语言:javascript
运行
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="1" class="my-divs">
    <div>1</div>
    <div>2</div>
    <div>3</div>
    <div>4</div>
    <div>5</div>
</div>
<hr></hr>
<div id="2" class="my-divs">
    <div>1</div>
    <div>2</div>
    <div>3</div>
    <div>4</div>
    <div>5</div>
</div>

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57558356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档