从表中选择随机可见行并克隆它(使用JS / jQuery)

时间:2017-09-21 14:35:14

标签: javascript jquery html arrays random

我试图从一个由100行组成的数组中获取一个随机行。有些是隐藏的,有些是可见的。

我的目标是获得一个随机可见的行,并将其克隆到另一个表中。 (可见和隐藏的行被分类,这就是我需要它的原因!)

我的代码:

<table id="Random">
</table>

<table id="Classified">
    <tr id="Row1" style="display:none">
        <td>1</td>
        <td>2</td>
        <td>3</td>
        <td>4</td>
    </tr>

    <tr id="Row2">
        <td>5</td>
        <td>6</td>
        <td>7</td>
        <td>8</td>
    </tr>

    <tr id="Row3" style="display:none">
        <td>9</td>
        <td>10</td>
        <td>11</td>
        <td>12</td>
    </tr>

    <tr id="Row4">
        <td>13</td>
        <td>21</td>
        <td>32</td>
        <td>43</td>
    </tr>

    <tr id="Row5">
        <td>15</td>
        <td>26</td>
        <td>37</td>
        <td>48</td>
    </tr>
</table>    


<script>
    $("#Random").html("");
    var randomtd = Math.floor(Math.random() * $('#Classified tr:visible').length) + 1;
    var identifiedRow = $('#Classified tr').eq(randomtd)[0];

    $("#Random").html(identifiedRow);    
</script>

3 个答案:

答案 0 :(得分:1)

您可以使用解决方案https://jsfiddle.net/1hok7xme/

$("#Random").html("");
   
$('#Classified tr').each(function(){
  if($(this).is(':visible')){
    $("#Random").append(`<tr>${$(this).html()}</tr>`);
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Random Table:
<table id="Random">
</table>

<br/>
Classified Table:
<table id="Classified">
    <tr id="Row1" style="display:none">
        <td>1</td>
        <td>2</td>
        <td>3</td>
        <td>4</td>
    </tr>

    <tr id="Row2">
        <td>5</td>
        <td>6</td>
        <td>7</td>
        <td>8</td>
    </tr>

    <tr id="Row3" style="display:none">
        <td>9</td>
        <td>10</td>
        <td>11</td>
        <td>12</td>
    </tr>

    <tr id="Row4">
        <td>13</td>
        <td>21</td>
        <td>32</td>
        <td>43</td>
    </tr>

    <tr id="Row5">
        <td>15</td>
        <td>26</td>
        <td>37</td>
        <td>48</td>
    </tr>
</table>

希望这会对你有所帮助。

答案 1 :(得分:0)

您的问题在于以下几行:

var randomtd = Math.floor(Math.random() * $('#Classified tr:visible').length)+1;
var identifiedRow = $('#Classified tr').eq(randomtd)[0];

将它们更改为:

var randomtd = Math.floor(Math.random() * $('#Classified tr:visible').length);
var identifiedRow = $('#Classified tr:visible').eq(randomtd)[0];

jQuery .eq()需要一个整数,表示元素的从0开始的位置。

&#13;
&#13;
$("#Random").html("");
var randomtd = Math.floor(Math.random() * $('#Classified tr:visible').length);
var identifiedRow = $('#Classified tr:visible').eq(randomtd);

//$("#Random").html(identifiedRow);
$("#Random").append(identifiedRow.clone());
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Random table: <br/>
<table id="Random">
</table>
Classified table: <br/>
<table id="Classified">
    <tr id="Row1" style="display:none">
        <td>1</td>
        <td>2</td>
        <td>3</td>
        <td>4</td>
    </tr>

    <tr id="Row2">
        <td>5</td>
        <td>6</td>
        <td>7</td>
        <td>8</td>
    </tr>

    <tr id="Row3" style="display:none">
        <td>9</td>
        <td>10</td>
        <td>11</td>
        <td>12</td>
    </tr>

    <tr id="Row4">
        <td>13</td>
        <td>21</td>
        <td>32</td>
        <td>43</td>
    </tr>

    <tr id="Row5">
        <td>15</td>
        <td>26</td>
        <td>37</td>
        <td>48</td>
    </tr>
</table>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

好的,明白了!谢谢大家。每个+阵列。 ;)

        var arrayTmp = [];
            var i = 0;
            $('.Monstres tbody tr').each(function(){
              if($(this).is(':visible')){
                arrayTmp[i] = '<tr>'+$(this).html()+'</tr>';
                i++;
              }
            });
            var arrayTmp = arrayTmp[Math.floor(Math.random()*arrayTmp.length)];
            $(".Random table").append(arrayTmp);