【问题标题】:get highest attribute number in jquery and ecmascript6获取 jquery 和 ecmascript6 中的最高属性号
【发布时间】:2018-04-26 13:52:38
【问题描述】:

尝试获取具有相同数据属性的所有选择的最大值。但收到错误

{ "message": "Uncaught TypeError: undefined is not a function",
“文件名”:“https://stacksnippets.net/js”,“lineno”:37,“colno”: 34 }

请在下面运行 sn-p 我希望它可以输出 3,因为它是最高的 responsegroupnumber,question.id 为 1

$(document).ready(function() {
  let question = {
    Id: 1
  };

  let responseGroupNumber = Math.max(...$(`select[data-questionid = ${question.Id}]`)
    .map(x => $(x)
      .attr('data-responsegroupnumber')));

  console.log(responseGroupNumber);

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<select data-questionid="1" data-responsegroupnumber="1">
  <option>one</option>
  <option>two</option>
  <option>three</option>
</select>


<select data-questionid="1" data-responsegroupnumber="2">
  <option>one</option>
  <option>two</option>
  <option>three</option>
</select>

<select data-questionid="1" data-responsegroupnumber="3">
  <option>one</option>
  <option>two</option>
  <option>three</option>
</select>

【问题讨论】:

  • 您遇到的究竟是什么错误?

标签: javascript jquery ecmascript-6 arrow-functions


【解决方案1】:

映射前需要使用jQuery.get()函数:

如果你不这样做,你将使用 jQuery .map() 方法而不是 Array#map

$(document).ready(function() {
  let question = {
    Id: 1
  };
  
  let responseGroupNumber = Math.max(...$(`select[data-questionid = ${question.Id}]`).get().map(x => $(x).attr('data-responsegroupnumber')));
  console.log(responseGroupNumber);
  
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<select data-questionid="1" data-responsegroupnumber="1">
  <option>one</option>
  <option>two</option>
  <option>three</option>
</select>


<select data-questionid="1" data-responsegroupnumber="2">
  <option>one</option>
  <option>two</option>
  <option>three</option>
</select>

<select data-questionid="1" data-responsegroupnumber="3">
  <option>one</option>
  <option>two</option>
  <option>three</option>
</select>

【讨论】:

  • 我认为 jQuery 对象有 .map() 函数
  • @Pointy 我知道,我只是想 OP 想使用Array#map。如果 OP 正确使用它们,这两种方法都是有效的。
【解决方案2】:

另一种可能的实现可能是:

$(document).ready(function() {
 let question = {
   Id: 1
 };

 var selects = $(`select[data-questionid=${question.Id}]`).toArray();
 var dataGroupNumber = selects.map(select => ($(select).attr('data- 
   responsegroupnumber')));

let responseGroupNumber = Math.max.apply(null, dataGroupNumber);
console.log(responseGroupNumber);
});

Math.max.apply(null, dataGroupNumber) 而不是在 Math.max( ... ) 内展开数组;

【讨论】:

    猜你喜欢
    • 2013-01-24
    • 2014-06-09
    • 1970-01-01
    • 2014-09-14
    • 2013-05-02
    • 1970-01-01
    • 2011-12-01
    • 1970-01-01
    • 2011-02-07
    相关资源
    最近更新 更多