简体   繁体   English

使用jQuery将数组元素插入div的li元素

[英]Insert array elements into a div's li element with jQuery

I am trying to build a random teams creator with jQuery. 我正在尝试使用jQuery构建随机团队创建者。 I've finished working on the functions, it creates random teams, but now I'm trying to get the created teams' players into divs ordered as ul . 我已经完成了函数的工作,它创建了随机的团队,但是现在我正在尝试将创建的团队的玩家按ul顺序放入div中。 I've tried with $('#team1 li').html( team ); 我已经尝试过$('#team1 li').html( team ); but the whole team is displayed in one li element. 但整个团队都显示在一个li元素中。 How can I display one player in one li element? 如何在一个li元素中显示一位玩家?

Here is the HTML code: 这是HTML代码:

<form>
    <div class="teamsNumber">How many teams do you want to create?<br>
        <input type="text" name="teamsNumber"><br>
    </div>
    <br>
    <div class="players">Players:<br>
        <textarea rows="12" cols="20"></textarea>
    </div>
    <input type="submit" value="Submit"><br>
</form>

<div class="resultingTeams">
    <h1>Team 1</h1>
    <ul id="team1">
        <li id="p1">player 1</li>
        <li id="p2">player 2</li>
        <li id="p3">player 3</li>
        <li id="p4">player 4</li>
        <li id="p5">player 5</li>
    </ul>
</div>

Here is the jQuery code: 这是jQuery代码:

$(document).ready(function () {

    $("form").submit(function (event) {
        event.preventDefault();

        var playerNames = $(".players textarea").val();
        var players = playerNames.split("\n");
        var playersAmount = (players.length);
        var teamsAmount = $(".teamsNumber input").val();
        var mixedPlayers = [];
        var minIndex = 0;
        var maxIndex = playersAmount - 1;

        for (i = 0; i < playersAmount; i++) {

            var random = getRandom(minIndex, maxIndex);

            while (mixedPlayers[random] !== undefined) {
                random = getRandom(minIndex, maxIndex);
            }

            mixedPlayers[random] = players[i];

        }

        var breakpoint = Math.ceil(playersAmount / teamsAmount);
        $('#resultingTeams').html("");
        for (i = 0; i < teamsAmount; i++) {
            var team = mixedPlayers.splice(0, breakpoint);

            //$('.resultingTeams').append(" ");
            console.log(team)
        }

        function getRandom(min, max) {
            return Math.round(Math.random() * (max - min) + min);
        }

        $('#team1 li').html(team);
    });
})

https://jsfiddle.net/uybgdhcp/ https://jsfiddle.net/uybgdhcp/

Try with Array#forEach .And declare the team=[] as a array.Then push the data with team. 尝试使用Array#forEach 。然后将team=[]声明为数组。然后使用team推送数据。

DEMO jsfiddle 演示jsfiddle

 $("form").submit(function(event) { event.preventDefault(); var team=[]; var playerNames = $(".players textarea").val(); var players = playerNames.split("\\n"); var playersAmount = (players.length); var teamsAmount = $(".teamsNumber input").val(); var mixedPlayers = []; var minIndex = 0; var maxIndex = playersAmount - 1; for (i = 0; i < playersAmount; i++) { var random = getRandom(minIndex, maxIndex); while (mixedPlayers[random] !== undefined) { random = getRandom(minIndex, maxIndex); } mixedPlayers[random] = players[i]; } var breakpoint = Math.ceil(playersAmount / teamsAmount); $('#resultingTeams').html(""); for (i = 0; i < teamsAmount; i++) { team.push(mixedPlayers.splice(0, breakpoint)); console.log(team) } function getRandom(min, max) { return Math.round(Math.random() * (max - min) + min); } team.forEach(function(a, b) { $('#team1 li').eq(b).html(a); }) }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> <form> <div class="teamsNumber">How many teams do you want to create?<br> <input type="text" name="teamsNumber"><br> </div> <br> <div class="players">Players:<br> <textarea rows="12" cols="20"></textarea> </div> <input type="submit" value="Submit"><br> </form> <div class="resultingTeams"> <h1>Team 1</h1> <ul id="team1"> <li id="p1">player 1</li> <li id="p2">player 2</li> <li id="p3">player 3</li> <li id="p4">player 4</li> <li id="p5">player 5</li> </ul> </div> 

$('#team1 li').html( team ); essentially selects all the <li /> elements in the #team1 list and puts the whole team list in each. 本质上是选择#team1列表中的所有<li />元素,然后将整个团队列表放在每个元素中。

You probably want to put one team member in each list item. 您可能希望在每个列表项中放置一个团队成员。 Looping over the team members and putting 'em one by one into the list could be achieved with something like this: 遍历团队成员并将他们一个一枚地放入列表中可以通过以下方式实现:

team.forEach(function(teamMember, index) {
  $('#team1 li')         // Selects all the list items in #team1 list
    .eq(index)           // Get's the specific list item at position `index`
    .html(teamMember);   // Puts the contents of `teamMember` in that list item
});

You can map each team array to an array of <li> s and compose the HTML from there. 您可以将每个团队数组映射到<li>的数组,然后从那里组成HTML。

 function getRandom(min, max) { return Math.round(Math.random() * (max - min) + min); } $(document).ready(function() { $("form").submit(function(event) { event.preventDefault(); var playerNames = $(".players textarea").val(); var players = playerNames.split("\\n"); var playersAmount = (players.length); var teamsAmount = $(".teamsNumber input").val(); var mixedPlayers = []; var minIndex = 0; var maxIndex = playersAmount - 1; for (i = 0; i < playersAmount; i++) { var random = getRandom(minIndex, maxIndex); while (mixedPlayers[random]) { random = getRandom(minIndex, maxIndex); } mixedPlayers[random] = players[i]; } var breakpoint = Math.ceil(playersAmount / teamsAmount); $('.resultingTeams').html(""); for (i = 0; i < teamsAmount; i++) { var team = mixedPlayers.splice(0, breakpoint); var $team = team.map((name) => $("<li>").text(name)); $('.resultingTeams').append($("<h1>").text("Team " + (i + 1))); $('.resultingTeams').append($("<ul>").html($team)); } }); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <form> <div class="teamsNumber">How many teams do you want to create? <br> <input type="text" name="teamsNumber" value="3"> <br> </div> <br> <div class="players">Players: <br> <textarea rows="12" cols="20">Alice Bob Chris Darren Eugene Felix</textarea> </div> <input type="submit" value="Submit"> <br> </form> <div class="resultingTeams"></div> 

Thank you all for helping! 谢谢大家的帮助! I did it how Chris G said :) 我做到了克里斯·G(Chris G)的话:)

 function getRandom(min, max) { return Math.round(Math.random() * (max - min) + min); } $(document).ready(function() { $("form").submit(function(event) { event.preventDefault(); var playerNames = $(".players textarea").val(); var players = playerNames.split("\\n"); var playersAmount = (players.length); var teamsAmount = $(".teamsNumber input").val(); var mixedPlayers = []; var minIndex = 0; var maxIndex = playersAmount - 1; for (i = 0; i < playersAmount; i++) { var random = getRandom(minIndex, maxIndex); while (mixedPlayers[random]) { random = getRandom(minIndex, maxIndex); } mixedPlayers[random] = players[i]; } var breakpoint = Math.ceil(playersAmount / teamsAmount); $('.resultingTeams').html(""); for (i = 0; i < teamsAmount; i++) { var team = mixedPlayers.splice(0, breakpoint); var $team = team.map((name) => $("<li>").text(name)); $('.resultingTeams').append($("<h1>").text("Team " + (i + 1))); $('.resultingTeams').append($("<ul>").html($team)); } }); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <form> <div class="teamsNumber">How many teams do you want to create? <br> <input type="text" name="teamsNumber" value="3"> <br> </div> <br> <div class="players">Players: <br> <textarea rows="12" cols="20">Alice Bob Chris Darren Eugene Felix</textarea> </div> <input type="submit" value="Submit"> <br> </form> <div class="resultingTeams"></div> 

 function getRandom(min, max) { return Math.round(Math.random() * (max - min) + min); } $(document).ready(function() { $("form").submit(function(event) { event.preventDefault(); var playerNames = $(".players textarea").val(); var players = playerNames.split("\\n"); var playersAmount = (players.length); var teamsAmount = $(".teamsNumber input").val(); var mixedPlayers = []; var minIndex = 0; var maxIndex = playersAmount - 1; for (i = 0; i < playersAmount; i++) { var random = getRandom(minIndex, maxIndex); while (mixedPlayers[random]) { random = getRandom(minIndex, maxIndex); } mixedPlayers[random] = players[i]; } var breakpoint = Math.ceil(playersAmount / teamsAmount); $('.resultingTeams').html(""); for (i = 0; i < teamsAmount; i++) { var team = mixedPlayers.splice(0, breakpoint); var $team = team.map((name) => $("<li>").text(name)); $('.resultingTeams').append($("<h1>").text("Team " + (i + 1))); $('.resultingTeams').append($("<ul>").html($team)); } }); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <form> <div class="teamsNumber">How many teams do you want to create? <br> <input type="text" name="teamsNumber" value="3"> <br> </div> <br> <div class="players">Players: <br> <textarea rows="12" cols="20">Alice Bob Chris Darren Eugene Felix</textarea> </div> <input type="submit" value="Submit"> <br> </form> <div class="resultingTeams"></div> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM