【问题标题】:dynamic html content from javascript (using jquery methods)来自 javascript 的动态 html 内容(使用 jquery 方法)
【发布时间】:2019-02-12 14:37:11
【问题描述】:

jquery 在我的 js 代码之前加载到我的 html 中。 然后在我的puzzle.js 中有:

class Puzzle {
  constructor(ID, Name, Status) {
    this.ID = "main" + ID;
    this.Name = Name;
    this.Status = Status;
    this.mainDiv = "";
  }

  generateDiv() {
    this.mainDiv = '<div id="' + this.ID + '"/>';
    $(this.mainDiv).addClass("puzzle");
  }
}

$(document).ready(function() {
  var puzzle = new Puzzle(1, "MyPuzzle", 1);
  puzzle.generateDiv();
  $("#Puzzles").append(puzzle.mainDiv);
})
.puzzle {
  width: 200px;
  height: 200px;
  background: black;
  border 1px solid white;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="Puzzles"></div>

并且 div 添加了漂亮的 ID 字段,但类没有。事实上,我对 div "jquery-style" 所做的任何事情都没有做任何事情(但也没有控制台错误)

我注意到在检查器(chrome)中,div 显示为

<div id="main1"></div> == $0

不确定它的含义或是否相关。

我做错了什么???

【问题讨论】:

  • 我知道我可以轻松地在 html 代码中添加类,但我假装在我的 html 上执行其他 jquery 操作。事情要复杂得多。我需要一个这样做的平台。
  • chrome 中的== $0explained here
  • 我很确定这永远不会奏效:$(this.mainDiv).addClass("puzzle");,因为你在课堂上,而 jQuery 不会在那个上下文中运行。
  • 哦,你完全错了。 $(".template").clone() 在我的课堂上就像一个魅力。我认为根本错误是必须在 DOM 中才能通过 $( __ ) 找到它们,但我仍在调查。

标签: javascript jquery html


【解决方案1】:

你需要存储 jQuery 版本的 div:

this.mainDiv = $(this.mainDiv).addClass("puzzle");

否则,您将该类添加到下一行中丢弃的内容中。

考虑什么是discussed here

var $div = $("&lt;div&gt;", {id: "foo", "class": "a"});

Mark Ba​​ijens 的评论:

在包含 jQuery 对象的变量前面添加一个美元符号是很常见的

您可以执行以下操作:

class Puzzle {
  constructor(ID, Name, Status) {
    this.ID = "main" + ID;
    this.Name = Name;
    this.Status = Status;
    this.$mainDiv = null;
  }

  generateDiv() {
    this.$mainDiv = $("<div>", {id: this.ID, "class": "puzzle"});
  }
}

$(document).ready(function() {
  var puzzle = new Puzzle(1, "MyPuzzle", 1);
  puzzle.generateDiv();
  $("#Puzzles").append(puzzle.$mainDiv);
})
.puzzle {
  width: 200px;
  height: 200px;
  background: black;
  border 1px solid white;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="Puzzles"></div>

【讨论】:

  • 只需将 div 实例化为 this.mainDiv = $('&lt;div id="'+this.ID+'"/&gt;'); 而不是原来的 this.mainDiv = '&lt;div id="' + this.ID + '"/&gt;'; 也可以解决问题
  • @javirs 最佳实践是将this.mainDiv 更改为this.$mainDiv,这样如果您使用该解决方案,您就可以很容易地看到该变量中存储了一个jQuery 对象。在包含 jQuery 对象的变量前面添加一个美元符号是很常见的。
  • 不知道 $name 是一个有效的变量名,非常感谢
  • @MarkBaijens 我将您的提示添加到我的答案中。谢谢!
  • @javirs 我还更新了我的答案以展示最佳实践的使用。
猜你喜欢
  • 2011-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-21
  • 1970-01-01
  • 2015-09-24
  • 2012-08-30
相关资源
最近更新 更多