A-A+

Javascript动态添加页面元素及设置属性(div、li、img)

2016年01月10日 前端设计 暂无评论 阅读 5 views 次

动态添加页面元素的一个属性其实使用js很容易实现的如创建一个 div,img,js都可以使用函数来创建,下面看例子。

网页是由 html 标签一层层组成的,js 也可以动态添加一层层的诸如 div、li、img 这样的标签。其实,不管是什么 html 标签,js 动态创建的方法都差不多,接着就先从动态添加 div 开始。

一、js 动态添加元素div

  1. <div id="parent"></div>  
  2. function addElementDiv(obj) {  
  3. var parent = document.getElementById(obj);  
  4. //添加 div  
  5. var div = document.createElement("div");  
  6. //设置 div 属性,如 id  
  7. div.setAttribute("id", "newDiv");  
  8. div.innerHTML = "js 动态添加div";  
  9. parent.appendChild(div);  
  10. }  

调用:addElementDiv("parent");

二、js 动态添加li

  1. <ul id="parentUl"><li>原li</li></ul>  
  2. function addElementLi(obj) {  
  3. var ul = document.getElementById(obj);  
  4. //添加 li  
  5. var li = document.createElement("li");  
  6. //设置 li 属性,如 id  
  7. li.setAttribute("id", "newli");  
  8. li.innerHTML = "js 动态添加li";  
  9. ul.appendChild(li);  
  10. }  

调用:addElementLi("parentUl");

三、js 动态添加元素img

  1. <ul id="parentUl"></ul>  
  2. function addElementImg(obj) {  
  3. var ul = document.getElementById(obj);  
  4. //添加 li  
  5. var li = document.createElement("li");  
  6. //添加 img  
  7. var img = document.createElement("img");  
  8. //设置 img 属性,如 id  
  9. img.setAttribute("id", "newImg");  
  10. //设置 img 图片地址  
  11. img.src = "/images/prod.jpg";  
  12. li.appendChild(img);  
  13. ul.appendChild(li);  
  14. }  

调用:addElementImg("parentUl");

现在比较流行jquery,代码如下:

  1. $('input').click(function () {  
  2. //处理代码  
  3. });  
  4. 或代码如下:  
  5. $('.clickme').bind('click', function() {  
  6. // Bound handler called.  
  7. });  

但是这只能是对已经加载好的元素定义事件,那些后来添加插入的元素则需要另行绑定。即使你使用jquery的clone函数,它并不能将事件也复制(到目前为止我还不清楚它是为什么这样定义,是没法复制还是刻意这么处理,以防止出现某些异常,这还有待去分析一下jquery的源代码)。

现在,使用live你可以轻松搞定,

$('.clickme').live('click', function() { // Live handler called. });

这样,你即使在后面动态插入的元素,也会被绑定事件:

$('body').append('

Another target

');

定义和用法

live() 方法为被选元素附加一个或多个事件处理程序,并规定当这些事件发生时运行的函数。

通过 live() 方法附加的事件处理程序适用于匹配选择器的当前及未来的元素(比如由脚本创建的新元素)。

问题:使用jQuery的live()方法绑定事件,有时会出现重复绑定的情况,如,当点击一个按钮时,此按钮所绑定的事件会并执行n遍。
解决:使用die()方法,在live()方法绑定前,将此元素上的前面被绑定的事件统统解除,然后再通过live()方法绑定新的事件。

Js代码:

  1. //先通过die()方法解除,再通过live()绑定  
  2. $("#selectAll").die().live("click",function(){  
  3. //事件运行代码  
  4. });  
  5. //先通过die()方法解除,再通过live()绑定  
  6. $("#selectAll").die().live("click",function(){  
  7.   //事件运行代码  
  8.  });die()方法简介:  

Js代码

  1. die([type], [fn])<SPAN style="WHITE-SPACE: normal"> </SPAN>  
  2. die([type], [fn])  

概述:

jQuery 1.3新增。此方法与live正好完全相反。

如果不带参数,则所有绑定的live事件都会被移除。

你可以解除用live注册的自定义事件。

如果提供了type参数,那么会移除对应的live事件。

如果也指定了第二个参数function,则只移出指定的事件处理函数。

例子.jquery创建元素

  1. function CreateDom() {  
  2.               var select = $("<select/>").appendTo($("body"));  
  3.            var option1 = $("<option value=\"1\">text1</option>").appendTo(select);  
  4.            var option2 = $("<option value=\"2\">text2</option>").appendTo(select);  
  5.            var option3 = $("<option value=\"3\">text3</option>").appendTo(select);  
  6.            var text = $("<input type=\"text\">").css({ "width""150px""border""1px lightgrey solid" }).appendTo($("body"));  
  7.            var checkbox = $("<input type=\"checkbox\" />").appendTo($("body"));  
  8.            var ul = $("<ul/>").appendTo($("body"));  
  9.            var li = $("<li>li1</li>").appendTo(ul);  
  10.            var li = $("<li>li2</li>").appendTo(ul);  
  11.  }  

给我留言