Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用映射函数(javascript)将元素添加到列表中_Javascript_Html_Jquery_Css - Fatal编程技术网

使用映射函数(javascript)将元素添加到列表中

使用映射函数(javascript)将元素添加到列表中,javascript,html,jquery,css,Javascript,Html,Jquery,Css,我有一个按钮列表。这里,我使用映射函数显示我的按钮,因为按钮的数量由列表中元素的数量决定,例如,“myList”有4个字母。但是,在其他情况下,列表将包含不同数量的字母 按钮也根据另一个名为“myColors”的列表进行着色,在其他情况下也会发生变化 但是,我将始终在按钮菜单的底部显示“完成”按钮,尽管列表的长度因情况而异。我希望将此按钮放在同一菜单(#buttonGallery)中,以便格式保持一致。有人知道如何将“完成”按钮插入地图功能吗 非常感谢!(任何关于编辑这篇文章以使其更清晰的建议也

我有一个按钮列表。这里,我使用映射函数显示我的按钮,因为按钮的数量由列表中元素的数量决定,例如,“myList”有4个字母。但是,在其他情况下,列表将包含不同数量的字母

按钮也根据另一个名为“myColors”的列表进行着色,在其他情况下也会发生变化

但是,我将始终在按钮菜单的底部显示“完成”按钮,尽管列表的长度因情况而异。我希望将此按钮放在同一菜单(#buttonGallery)中,以便格式保持一致。有人知道如何将“完成”按钮插入地图功能吗

非常感谢!(任何关于编辑这篇文章以使其更清晰的建议也将不胜感激。)

下面的代码:(现在,您可以看到我直接设置了“完成”按钮的位置)


.按钮{
宽度:150px;
高度:50px;
边框:纯色2px黑色;
文本对齐:居中;
颜色:黑色;
光标:指针;
背景色:白色;
保证金:2倍;
}
#钮扣{
利润率:10px;
填充:10px;
边框:纯色2px黑色;
宽度:155px;
}
#完成{
宽度:150px;
高度:50px;
边框:纯色2px黑色;
文本对齐:居中;
颜色:黑色;
光标:指针;
背景色:白色;
保证金:2倍;
}
完成

设$buttons=$(''); 让myList=[“A”、“B”、“C”、“D”]; 让myColors=[“红色”、“绿色”、“蓝色”、“红色”]; myList.map(函数(字母、索引){ 让$button=$(“”) .addClass(“按钮”) .attr(“id”、“按钮”+字母) .html(“”+字母+”

”) .on(“mouseenter”,function(){ $(this.css(“背景”,myColors[index]); }) .on(“mouseleave”,函数(){ if(!$(this).hasClass('clicked')){ $(this.css(“背景”、“透明”); } }) .on(“单击”,函数(){ $(this.css(“背景”,myColors[index]); $(this.addClass('clicked'); }) $button.append($button); }); $(“正文”)。附加($按钮); $(“#完成”)。在(“单击”,clearColor); 函数clearColor(){ $(“.buttons”).css({ 背景颜色:“透明” }); $(“.buttons”).removeClass('clicked'); }
我希望结果是这样的:

.map()返回一个数组。您是否尝试将其分配给变量

buttons=myList.map(…)

完成


//设$buttons=$('') 快速的答案是,您可以简单地将其附加到按住按钮的元素中:

$(“#完成”)。附加到(“#按钮集合”)

在这里,我对您的按钮进行了一些调整,减少了工作量,将
.on()
的行为移到了
.map
之外,您可以从对象值生成按钮。获取值的方式有多种,但使用数组,我只是在生成按钮时将其添加为
数据
属性,该属性可用于显示/隐藏和“修复”单击时的颜色。为了好玩,我还演示了如何在第二次单击时“切换”颜色

由于您正在为您的按钮库生成一个
div
,因此我将其添加到HTML中以简化代码

让myList=[“A”、“B”、“C”、“D”];
让myColors=[“红色”、“绿色”、“蓝色”、“红色”];
让画廊=$(“#按钮画廊”);//缓存要在别处使用的引用
myList.map(函数(字母、索引){
让$button=$(“

”); 美元按钮 .数据(“mycolor”,myColors[索引]) .attr(“id”、“按钮”+字母) .查找(“p”) .html(信件); $button.appendTo(图库); }); 画廊 .on(“鼠标指针“,”按钮“,”函数(){ $(this.css(“背景”,$(this.data(“mycolor”)); }) .on(“mouseleave”,“.buttons”,函数(){ 如果(!$(this).is('.clicked')){ $(this.css(“背景色”); } }) .on(“单击“,”按钮”,函数(){ 让isClicked=$(this).is('.clicked'); 设x=$(this.css('background-color'); 如果(x=$(此).data(“mycolor”)){ $(this.css(“背景”,$(this.data(“mycolor”)); } $(this.toggleClass('clicked',!isClicked)); }); $(“完成”) .附件(画廊) 。打开(“单击”,clearColor); 函数clearColor(){ $(“.buttons”) .removeClass('单击') .css({ 背景颜色:“” }); }
。按钮{
宽度:150px;
高度:50px;
边框:纯色2px黑色;
文本对齐:居中;
颜色:黑色;
光标:指针;
背景色:白色;
保证金:2倍;
}
#钮扣{
利润率:10px;
填充:10px;
边框:纯色2px黑色;
宽度:155px;
}
#完成{
宽度:150px;
高度:50px;
边框:纯色2px黑色;
文本对齐:居中;
颜色:黑色;
光标:指针;
背景色:白色;
保证金:2倍;
}

完成

<html lang="en" dir="ltr">

<head>
  <meta charset="utf-8">
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <style media="screen">
    .buttons {
      width: 150px;
      height: 50px;
      border: solid 2px black;
      text-align: center;
      color: black;
      cursor: pointer;
      background-color: white;
      margin: 2px;
    }

    #buttonGallery {
      margin: 10px;
      padding: 10px;
      border: solid 2px black;
      width: 155px;
    }

    #done {
      width: 150px;
      height: 50px;
      border: solid 2px black;
      text-align: center;
      color: black;
      cursor: pointer;
      background-color: white;
      margin: 2px;
    }
  </style>
</head>

<body>

  <div id="done">
    <p>done</p>
  </div>

  <script type="text/javascript">
    let $buttons = $('<div id="buttonGallery">');
    let myList = ["A", "B", "C", "D"];
    let myColors = ["red", "green", "blue", "red"];

    myList.map(function(letter, index) {
      let $button = $("<div></div>")
        .addClass("buttons")
        .attr("id", "button_" + letter)
        .html("<p>" + letter + "</p>")
        .on("mouseenter", function() {
          $(this).css("background", myColors[index]);
        })
        .on("mouseleave", function() {
          if (!$(this).hasClass('clicked')) {
            $(this).css("background", "transparent");
          }
        })
        .on("click", function() {
          $(this).css("background", myColors[index]);
          $(this).addClass('clicked');
        })
      $buttons.append($button);
    });

    $("body").append($buttons);

    $("#done").on("click", clearColor);

    function clearColor() {
      $(".buttons").css({
        backgroundColor: 'transparent'
      });
      $(".buttons").removeClass('clicked');
    }
  </script>
</body>

</html>
<body>
<div id="buttonGallery"> <!-- add this line -->
  <div id="done">
    <p>done</p>
  </div>
</div> <!-- add this line -->
  <script type="text/javascript">
//    let $buttons = $('<div id="buttonGallery">'); <-- remove this line
    let $buttonGallery = $("#buttonGallery");
    let myList = ["A", "B", "C", "D"];
    let myColors = ["red", "green", "blue", "red"];

    $buttonGallery.children(":not(#done)").remove(); // <-- add this to remove added button except done button.

    myList.map(function(letter, index) {
      let $button = $("<div></div>")
        .addClass("buttons")
        .attr("id", "button_" + letter)
        .html("<p>" + letter + "</p>")
        .on("mouseenter", function() {
          $(this).css("background", myColors[index]);
        })
        .on("mouseleave", function() {
          if (!$(this).hasClass('clicked')) {
            $(this).css("background", "transparent");
          }
        })
        .on("click", function() {
          $(this).css("background", myColors[index]);
          $(this).addClass('clicked');
        })
      $("#done").before($button); // <-- edit this line
    });

    // $("body").append($buttons); <-- remove this line

    $("#done").on("click", clearColor);

    function clearColor() {
      $(".buttons").css({
        backgroundColor: 'transparent'
      });
      $(".buttons").removeClass('clicked');
    }
  </script>
</body>