首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何选择value属性的值?

如何选择value属性的值?
EN

Stack Overflow用户
提问于 2019-06-12 08:54:12
回答 2查看 64关注 0票数 0

我试图通过切换函数隐藏它的子级注释,但是我想根据value属性隐藏它们。

这是我的js功能:

代码语言:javascript
复制
function toggle(id, lft, rgt) {
    var kids = (rgt - lft - 1) / 2;
    if (kids >= 1) {
        var element = document.querySelectorAll("div.md#com" + id)[0].getAttribute('value');
        var low = Number(element.split('-')[0]);
        var high = Number(element.split('-')[1]);
        for(var i = low + 1; i <= high - 1; i += 1){
            var x = document.querySelectorAll("div.md#com" + i)[0]
            if (x.style.display === "none") {
                x.style.display = "block";
            } else {
                x.style.display = "none";
            }
        }
    }

这就是结果:

代码语言:javascript
复制
<div>
    <div id="com4" class="md" value="7-10">yellow 
        <a onclick="toggle(4, 7, 10)" href="javascript:void(0)">[-]</a>
    </div>
    <div id="com5" class="md" value="8-9">not collapsing</div> //because of the id but I want to toggle them based on the value attribute
    <div id="com8" class="md" value="10-11">collapses</div>
 </div>

但我想:

代码语言:javascript
复制
<div>
    <div id="com4" class="md" value="7-10">yellow 
        <a onclick="toggle(4, 7, 10)" href="javascript:void(0)">[-]</a>
    </div>
    <div id="com5" class="md" value="8-9">Should collapse</div>
    <div id="com8" class="md" value="10-11">Should not collapse</div>
 </div>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-12 09:18:31

假设您想要的行为是在单击<a>元素时,您希望根据其父元素的value属性中提供的数值范围隐藏元素。例如,在您的示例中,您需要隐藏#com8,因为它位于7-10的范围内,而不是#com5

为了实现这一点,我强烈建议做一些改变:

  • all一个更独特的类,例如.com。我怀疑.md是一个非常通用的类,您可能会在同一页上的其他元素中使用它,所以让我们完成这个任务。
  • 不要使用保留的value属性,因为它是为类似输入的元素保留的。改用data-*属性:例如,我们可以使用data-range="7-10"。更好的是,您可以使用data-mindata-max,这样我们就可以避免解析范围。我把后者留给你了。
  • 不要使用内联JS,而是依赖addEventListener将单击事件绑定到<a>元素

现在,对于解决方案:如果我们稍微调整一下您的逻辑,它实际上是非常可行的:

  1. 单击<a>元素时,获取其最近父元素的data-range值。这可以使用.closest('div.com')完成,然后使用API接口检索范围。
  2. 拆分data-range属性,并记住使用+将其转换为数字
  3. 使用ES6阵列破坏minmax变量分配给已解析的data-range
  4. 检查所有.com元素:
    • 如果元素与触发器元素的父元素匹配,则忽略它
    • 否则,我们将检查它的id-使用String.prototype.substring()来删除前3个字符-是在数值范围内还是在数值范围之外。
    • 然后,使用此布尔值确定元素的style.display属性。

见下文的概念证明:

代码语言:javascript
复制
const collapseButtons = document.querySelectorAll('.collapse');

Array.from(collapseButtons).forEach(collapseButton => {
  collapseButton.addEventListener('click', e => {
    e.preventDefault();
    
    // Use ES6 destructuring to assign min/max values
    const [min, max] = e.target.closest('div.com').dataset.range.split('-').map(v => +v);
    
    const comments = document.querySelectorAll('.com');
    Array.from(comments).forEach(comment => {

      // If the element matches the trigger element's parent, do nothing
      if (comment === e.target.closest('div.com')) {
        return;
      }
     
      // Otherwise, decide if we should hide or show it
      const id = +comment.id.substring(3);
      const shouldHide = id < min || id > max;
      comment.style.display = shouldHide ? 'none' : 'block';
    });
  });
});
代码语言:javascript
复制
<div>
  <div id="com4" class="com md" data-range="7-10">yellow
    <a class="collapse" href="#">[-]</a>
  </div>
  <div id="com5" class="com md" data-range="8-9">Should collapse</div>
  <div id="com8" class="com md" data-range="10-11">Should not collapse</div>
</div>

票数 0
EN

Stack Overflow用户

发布于 2019-06-12 09:02:20

试一试这个

代码语言:javascript
复制
<div class="box" name="box1"></div>
<div class="box" name="box2"></div>
<div class="box" name="box3"></div>

$('.box').on('click', function(){
    var value = $(this).attr('name');
  alert(value);
});

或者如果您想使用value属性

代码语言:javascript
复制
$('.box').on('click', function(){
    var value = $(this).attr('value');
  alert(value);
});
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56558228

复制
相关文章

相似问题

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