【问题标题】:Add class to random li in all ul's将类添加到所有 ul 中的随机 li
【发布时间】:2015-10-21 18:28:17
【问题描述】:
<div id="question-1" name="question" 
    <ul>  
        <li name="347815" class="MULTIPLE" id="7548094" value="7548094">1</li>
        <li name="347815" class="MULTIPLE" id="7548095" value="7548095">2</li>
        <li name="347815" class="MULTIPLE" id="7548096" value="7548096">3</li>
        <li name="347815" class="MULTIPLE" id="7548097" value="7548097">4</li>
    </ul>
</div>

<div id="question-2" name="question" 
    <ul> 
        <li name="347818" class="MULTIPLE" id="7548140" value="7548140">1</li>
        <li name="347818" class="MULTIPLE" id="7548143" value="7548143">2</li>
        <li name="347818" class="MULTIPLE" id="7548168" value="7548168">Hemköp</li>
        <li name="347818" class="MULTIPLE" id="7548169" value="7548169">3</li>
        <li name="347818" class="MULTIPLE" id="7548184" value="7548184">4</li>
        <li name="347818" class="MULTIPLE" id="7548195" value="7548195">5</li>
        <li name="347818" class="MULTIPLE" id="7548208" value="7548208">6</li>
    </ul>
</div>

我需要一个 js "jquery" 代码来从所有 ul 列表中选择一个随机 li 元素。列表编号不断变化,所以我需要使用类似 .find();

这是我正确的代码,但它没有在所有 ul 中选择一个 li,它在随机 ul 中选择随机 li:

var list = $('ul > li');
list.eq(parseInt(Math.random()*list.length)).addClass('selected');

谢谢你们:)

更新:

@MTCoster 有正确的答案,这里是:

$("ul").each(function() { var liArr = $(this).children("li"); $(liArr[Math.floor(Math.random() * liArr.length)]).addClass('selected'); });

【问题讨论】:

  • 算术函数返回数字,您不必对它们调用parseInt()。
  • 这里使用parseInt() 代替Math.floor(),根据this 关于在JavaScript 中随机选择数组元素的问题。
  • @MTCoster 好的,它会起作用,但这绝对是一种令人困惑的方式。
  • 这也是不必要的。 .eq() 将自动将其参数转换为整数。
  • 看起来您正试图在每个 UL 中选择相同的随机 LI?如果是这样,您可以只过滤 nth-child 而不是使用 eq,类似这样 -> jsfiddle.net/04b0ju4h/2

标签: javascript jquery html css survey


【解决方案1】:

尝试使用.each()

   // select all `ul` elements
   $("ul").each(function() {
      // select all `li` elements that are children of `this` `ul`
      var list = $("> li", this);
      list.eq(Math.random() * list.length).addClass("selected");
   })

【讨论】:

  • 并检查:更多 .addClass("selected").prop("checked",true); ;)
【解决方案2】:

您目前拥有的代码是创建一个包含存在于 ul 元素中的所有 li 元素的单个数组,然后选择其中一个。您需要做的是首先选择所有ul 元素,然后从每个 中随机选择一个li 元素。试试这样的:

$("ul").each(function() {
  var liArr = $(this).children("li");
  $(liArr[Math.floor(Math.random() * liArr.length)]).addClass('selected');
});

编辑:您必须将数组中的选定元素包装在 jQuery 选择器中;我已经更新了代码以反映这一点。

【讨论】:

  • 对不起,但它说 Uncaught TypeError: liArr[Math.floor(...)].addClass is not a function.. 否则这正是我想要的。
  • 这是我需要的,但有人可以修复它,这样我就不会得到:Uncaught TypeError: liArr[Math.floor(...)].addClass is not a function.. 我会然后将其标记为已解决....谢谢
  • @HassanIla 抛出此错误是因为您试图在非 jQuery 对象上调用 jQuery 方法。修复就像将数组元素包装在 jQuery 选择器中一样简单。我已经更新了我的答案以反映这一点。
  • 非常感谢,我把它作为正确答案:)
猜你喜欢
  • 1970-01-01
  • 2011-01-17
  • 2011-03-01
  • 2023-03-10
  • 1970-01-01
  • 2018-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多