JavaScript - 模块模式 - 添加 div 的问题

标签 javascript module

我正在尝试理解 JavaScript 中的模块模式。我从教程中获取了一个基本框架,并尝试根据我的需要对其进行调整。有一个按钮应该添加一个带有一些文本的 div。

这是 JavaScript 部分:

// The module
var s,
    myArticles = {

    settings: {
        articleList: "#article-list",
        articleClass: ".article",
        articleIndex: 0
    },

    init: function() {
        // kick things off
        s = this.settings;
        var articles = document.getElementById(this.settings.articleList);
        this.createArticle();
    },

    createArticle: function() {
        var div = document.createElement("div");
        div.setAttribute("class", this.settings.articleClass);
        div.innerHTML = "Article" + this.settings.articleIndex;
        articles.appendChild(div);
        this.settings.articleIndex +=1;
    }
};

HTML 部分:

<body>
    <h1>My articles</h1>
    <div id="article-list"></div>
    <button onclick="myArticles.init()">Add Article</button>

  <script src="script.js"></script>
  </body>

CSS 部分:

.article {
    weight: 500px;
    height: 300px;
    background-color: red;
    display: block;
    margin: 10px 0 0 10px;
}

你能帮我让它工作吗? 此外,在设置部分,最初值被 $( ) 包围。它向我抛出错误,所以我将其删除。

谢谢。

编辑:这是我指的教程: https://css-tricks.com/how-do-you-structure-javascript-the-module-pattern-edition/

最佳答案

上面的代码有几个不同的问题:

  • 您删除的 $() 指的是 JQuery
  • div.setAttribute("class", this.settings.articleClass);将无法正常工作,因为您将类设置为查询选择器 .article 而不是类 article
  • articles 对于 init 是本地的,但您正试图在 createArticle 中访问它

您需要进行如下更改:

JS:

var myArticles = (function () {
    var s, articles;
    return {

        settings: {
            articleList: "article-list",
            articleClass: "article",
            articleIndex: 0
        },

        init: function() {
            // kick things off
            s = this.settings;
            articles = document.getElementById(this.settings.articleList);
            this.createArticle();
        },

        createArticle: function() {
            var div = document.createElement("div");
            div.setAttribute("class", this.settings.articleClass);
            div.innerHTML = "Article" + this.settings.articleIndex;
            articles.appendChild(div);
            this.settings.articleIndex +=1;
        }
    };
}());

HTML:

  <body>
    <h1>My articles</h1>
    <div id="article-list"></div>
    <button onclick="myArticles.init()">Add Article</button>
  <script src="//code.jquery.com/jquery-1.12.0.min.js"></script>
  <script src="script.js"></script>
  </body>

关于JavaScript - 模块模式 - 添加 div 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34865785/

相关文章:

javascript - 如何在javascript中将数组转换为数组对象?

javascript - AngularJS 在列中使用 ng-repeat 填充表格

javascript - 遍历数组,然后使用 promise 在数组上调用 .reduce

module - 所需脚本中的代码 "local a = (...);"是什么意思?

perl - 如何在 CPAN 上更新其他人的模块?

Java + Node 模块

python - 包 "within"模块

javascript - 如何在弹出窗口或 iframe 中显示网页?哪个是最佳实践?

javascript - 如何摆脱 Material UI 容器组件中的填充?

generics - 无法定义 'a->' b 函数列表