javascript - JQuery 的容器结构问题 - 包含容器

标签 javascript jquery html css structure

我正在为学校完成一个内存游戏,我真的很想用 CSS 动画翻转卡片,它本身非常简单。但是,我对 JavaScript 和 JQuery 还很陌生,这导致我在实现正确的容器结构时遇到了一些麻烦,我需要让卡片在单击时翻转。

目前棋盘内生成的棋子如下:

const generate=(cards)=>{
    cards.forEach(function(card, i) {
        $(".gameBoard") 
        .append($("<div>").addClass("front")// 
        .append($("<div>").addClass("back").append($("
         <img>").attr("src", cards[i]))));
    }); 
};

或者:

<div class="gameBoard>
    <div class="front"></div>
    <div class="back"><img src="cards"></div>
</div>

但是为了使动画正常运行,前后 div 都需要存在于同一个容器中,如下所示:

<div class="gameBoard>
    <div class="flip">
          <div class="front></div>
          <div class="back"><img src="cards></div>
     </div>
</div>

我如何添加我需要的 div (.flip) 但它包含正面和背面 div,而不仅仅是附加到在 .gameboard 容器中生成的其他 div。

谢谢。

最佳答案

使用模板文本而不是 jQuery 方法来创建 DOM 要简单得多。这样您就可以按照您习惯的方式描述 HTML。

const generate=(cards)=>{
    cards.forEach(function(card, i) {
        $(".gameBoard").append(`
          <div class=flip>
            <div class=front></div>
            <div class=back><img src="${cards[i]}"</div>
          </div>
        `);
    }); 
};

generate([
  "https://dummyimage.com/180x120/f00/fff.png&text=one",
  "https://dummyimage.com/180x120/0f0/fff.png&text=two",
  "https://dummyimage.com/180x120/00f/fff.png&text=three",
]);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<div class=gameBoard></div>

您会注意到 ${cards[i]},它允许您通过在运行时执行大括号中的代码来执行字符串插值。


这是一个普通的 JS 版本。

const generate=(cards)=>{
    var gb = document.querySelector(".gameBoard");
    cards.forEach(card =>
        gb.insertAdjacentHTML("beforeend", `
          <div class=flip>
            <div class=front></div>
            <div class=back><img src="${card}"</div>
          </div>
        `)
    ); 
};

generate([
  "https://dummyimage.com/180x120/f00/fff.png&text=one",
  "https://dummyimage.com/180x120/0f0/fff.png&text=two",
  "https://dummyimage.com/180x120/00f/fff.png&text=three",
]);
<div class=gameBoard></div>

它还使用 card 代替 cards[i],并使用箭头函数进行回调。


而这个执行单个追加。

const generate=(cards)=>{
    document.querySelector(".gameBoard")
      .insertAdjacentHTML("beforeend", cards.map(card =>
        ` <div class=flip>
            <div class=front></div>
            <div class=back><img src="${card}"</div>
          </div>`).join(""));
};

generate([
  "https://dummyimage.com/180x120/f00/fff.png&text=one",
  "https://dummyimage.com/180x120/0f0/fff.png&text=two",
  "https://dummyimage.com/180x120/00f/fff.png&text=three",
]);
<div class=gameBoard></div>

关于javascript - JQuery 的容器结构问题 - 包含容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47378543/

相关文章:

javascript - 渲染没有返回任何内容,但我不知道为什么

php - 您能否在使用 PHP 或 JavaScript 提交表单失败后重新填充文件输入?

javascript - 图像在浏览器中不会移位

javascript - ES6 导出默认值,多个函数相互引用

javascript - 在javascript中定期调用函数直到完成,然后开始调用不同的函数

php - Laravel 只验证发布的项目并忽略验证数组的其余部分

javascript - symfony2动态表单修改ajax jquery无效的CSRF token

css - 使用 HTML5 后, header 在 IE8 中重复

html - Flexbox 代码适用于除 Safari 之外的所有浏览器。为什么?

javascript - 如何动态添加事件和事件类型到javascript而不是jquery中的元素