Javascript 即时创建 <div>

Posted

技术标签:

【中文标题】Javascript 即时创建 <div>【英文标题】:Javascript creating <div> on the fly 【发布时间】:2010-12-24 10:30:08 【问题描述】:

我有一个与此类似的链接

<a href="/home/category/blog/1" id="blog">Blog</a>

链接的 ID 为“博客”,我想做的是动态创建一个 div,其 ID 来自单击的链接,因此如果单击“博客”,则标记将是

<div id="blog">
<!--some content here-->
</div>

同样,如果点击新闻链接,那么我想,

<div id="news">
<!--some content here-->
</div>

如果可能的话,要在标记中创建吗?以及我对 jQuery 是多么陌生。

【问题讨论】:

您希望两个不同的 DOM 元素具有相同的 ID?你确定吗? 你想要两个元素的 id 冲突吗? 您希望在当前页面上创建新标记吗?还是链接重定向到的页面? 如果你想用一个属性引用两个不同的东西,请改用类属性。 【参考方案1】:

试试这个:

$("a").click(function()
    $("#wrapper").append("<div id=" + this.id + "></div>");
);

未经测试,应该可以工作;) 其中:#wrapper 是父元素,如您所见,对所有 a 工作。

【讨论】:

ID 属性必须像其他人所说的那样是唯一的 (w3.org/TR/html401/struct/global.html#h-7.5.2)... 如果您想要相同的 ID,我想是在创建它之后在某处引用它? w3c 未定义引用重复 ID,上帝知道不同的浏览器将如何在它们之间进行选择。我建议您将这种技术与 class 属性一起使用。 this.id 可以使用时不要使用$(this).attr('id')。即使在那之后,这仍然是一个糟糕的答案,因为重复的 id 属性。【参考方案2】:

您需要为 div 指定不同的 ID。也许你可以给它一个类:

$("#blog").click(function() 
  $(this).after("<div class='blog'>...</div>");
  return false;
);

这只是创建 div 的众多方法之一。您可能还想避免重复,但在这种情况下,请使用以下内容:

$("#blog").click(function() 
  var content = $("#blog_content");
  if (content.length == 0) 
    content = $("<div></div>").attr("id", "blog_content");
    $(this).after(content);
  
  content.html("...");
  return false;
);

至于如何处理多个此类链接,我会这样做:

<a href="#" id="blog" class="content">Blog</a>
<a href="#" id="news" class="content">News</a>
<a href="#" id="weather" class="content">Weather</a>
<div id="content"></div>

与:

$("a.content").click(function() 
  $("#content").load('/content/' + this.id, function() 
    $(this).fadeIn();
  );
  return false;
);

关键是这个事件处理程序处理所有链接。它使用选择器和 ID 的类来识别它们,并且避免了过多的 DOOM 操作。如果您希望将这些东西中的每一个放在单独的&lt;div&gt; 中,我会静态地创建它们,而不是动态地创建它们。如果您不需要查看它们,请隐藏它们。

【讨论】:

+1 获取详细示例和其他处理方式【参考方案3】:

试试这个:

<a  id="blog">Blog</a>
<a  id="news">news</a>
<a  id="test1">test1</a>
<a  id="test2">test2</a>

$('a').click(function()
             
                 $('<div/>',
                     id : this.id,
                     text : "you have clicked on : " + this.id
                 ).appendTo("#" + this.id);
             );

【讨论】:

【参考方案4】:

首先,您不应该创建 2 个具有相同 ID 的元素。在您的示例中,a 和 div 都将具有 id="blog"。不兼容 XHTML,如果你引用它们,可能会弄乱你的 JS 代码。

非 jquery 解决方案来了(在脚本标签中添加这个):

function addDiv (linkElement) 
  var div = document.createElement('div');
  div.id = linkElement.id;
  div.innerHTML = '<!--some content here-->';
  document.body.appendChild(div); // adds element to body

然后在 HTML 元素中添加一个“事件处理程序”:

<a href="/home/category/blog/1" id="blog" onClick="addDiv(this); return false;">Blog</a>

【讨论】:

【参考方案5】:

这个question 描述了如何创建一个div。但是,您不应该有两个具有相同 ID 的元素。你有什么理由不能给它一个像content_blogcontent_news这样的ID吗?

【讨论】:

【参考方案6】:

不幸的是,如果您单击一个链接,您所转到的页面不知道您单击的链接的想法是什么。它知道的唯一信息是 URL 中包含的内容。更好的方法是使用查询字符串:

<a href="/home/category/blog/1?id=blog">Blog</a>

然后使用jQuery querystring plugin 你可以创建这样的div:

$("wrapper").add("div").attr("id", $.query.get("id"));

【讨论】:

【参考方案7】:

您的页面中不应包含具有相同 ID 的元素。如果你愿意,可以使用前缀,或者可以使用一个类。

但是,答案如下。我想象您的可点击链接位于 ID 为“menu”的 div 中,而您的动态 div 将在 ID 为“content”的 div 中创建。

$('div#menu a').click(function()
    $('div#content').append('<div id="content_'+this.id+'"><!-- some content here --></div>');
);

有什么问题,在cmets中提问!

【讨论】:

【参考方案8】:

以下语句也可用于动态创建 div。

$("&lt;div&gt;Hello&lt;/div&gt;").appendTo('.appendTo');

工作小提琴:https://jsfiddle.net/andreitodorut/xbym0bsu/

【讨论】:

【参考方案9】:

你可以试试这个代码

$('body').on('click', '#btn', function() 
  $($('<div>').text('NewDive').appendTo("#old")).fadeOut(0).fadeIn(1000);
)
#old > div
  width: 100px;
  background: gray;
  color: white;
  height: 20px;
  font: 12px;
  padding-left: 4px;
  line-height: 20px;
  margin: 3px;
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Test</title>
    <link rel="stylesheet" href="./index.css">
  </head>
  <body>
    <div>
      <!-- Button trigger modal -->
      <button type="button" id="btn">Create Div</button>
      <div id="old">

      </div>
    </div>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
  </body>
</html>

【讨论】:

以上是关于Javascript 即时创建 <div>的主要内容,如果未能解决你的问题,请参考以下文章

javascript,动态创建<div>错哪了?报错啊!

怎么使用javascript动态生成嵌套的div

在javascript中选择第一个div孩子的第二个孩子[重复]

javascript 创建 div

在javascript中删除特定标记及其内容

javascript innerHTML累加值问题~~求解