DOM是Document Object Model的缩写,意思是文档对象模型。根据W3C DOM的规范,DOM是一种与浏览器、平台、语言无关的接口,它解决了Netscape的javascript和Microsoft的JScript之间的冲突,这样就可以让开发者们能够轻松的获取和操作网页中的数据、脚本和表现层现象。
DOM操作包含3个方面,即DOM Core(核心)、HTML-DOM和CSS-DOM。
1.DOM Core
DOM Core并不专属于javascript,任何一种支持DOM的程序设计语言都可以使用它。它的用途并非仅限于处理网页,也可以用来处理任何一种使用标记语言编写出来的文档,例如xml。
Javascript中的getElementById(),getElementsByTagName(),getAttribute()和setAttribute()等方法,这些都是DOM Core的组成部分。
2.HTML-DOM
使用HTML-DOM获取对象的方法。
document.forms;
element.src;
3.CSS-DOM
CSS-DOM是针对css的操作。CSS-DOM技术的主要的作用是获取和设置style对象的各种属性。通过改变style对象的各种属性,可以使网页呈现出各种不同的效果。
element.style.color="red";
DOM操作
1.查找节点 var $para=$("p");
2.创建节点 var $para=$("<li></li>");
3.插入节点
| 方法 | 描述 | 示例 |
| append() | 向每个匹配的元素内部追加内容 |
$("p").append("<b>你好</b>"); 结果: <p>我想说:<b>你好</b></p> |
| appendTo() |
将所有匹配的元素追加到指定的元素中。该方法其实颠倒了 $(A).append(B)的操作,将A追加到B中。 |
$("<b>你好</b>").appendTo("p"); 结果: <p>我想说:<b>你好</b></p> |
| prepend() | 向每个匹配的元素内部前置内容 |
$("p").prepend("<b>你好</b>"); 结果: <p><b>你好</b>我想说:</p> |
| prependTo() | 将所有匹配的元素前置到指定的元素中。该方法其实颠倒了
$(A).prepend(B)的操作,将A前置到B中。 |
$("<b>你好</b>").prependTo("p"); 结果: <p><b>你好</b>我想说:</p> |
| after() | 在每个匹配的元素之后插入内容 |
$("p").after("<b>你好</b>"); 结果: <p>我想说:</p><b>你好</b> |
| insertAfter() |
将所有匹配的元素插入到指定元素的后面。该方法其实颠倒了 $(A).after(B)的操作,将A插入到B后面。 |
$("<b>你好</b>").insertAfter("p"); 结果: <p>我想说:</p><b>你好</b> |
| before() | 在每个匹配的元素之前插入内 |
$("p").before("<b>你好</b>"); 结果: <b>你好</b><p>我想说:</p> |
| insertBefore() | 将所有匹配的元素插入到指定的元素的前面。该方法其实颠倒了$(A).before()的操作,将A插入到B前面 |
$("<b>你好</b>").insertBefore("p"); 结果: <b>你好</b><p>我想说:</p> |
4.删除节点
| 方法 | 描述 | 示例 |
| remove() |
删除节点及其后代节点,还有它们绑定的事件,返回值是一个指向已被删除的节点的引用。 1)appendTo()方法也可以移动元素 2)remove()可以加参数选择性地删除元素。 |
var $li=$("ul li:eq(1)").remove();//获取删除的节点 $li.appendTo("ul");//添加节点 $("ul li").remove("li[title!=菠萝]");//删除属性不为“菠萝”的元素 |
| detach() | 与remove()类似,不同的是,所有的绑定事件、附加的数据等都会保留下来。 |
$("ul li").click(function(){ alert("123"); }); var $li=$("ul li:eq(1)").detach();//删除元素 $li.appendTo("ul");//添加节点,之前的事件还在 |
| empty() | 清空节点,清空元素中的所有后代节点。注意是元素里 |
$("ul li:eq(1)").empty();//清空元素里的内容 <li></li>该节点还在 |
5.复制节点
$("ul li:eq(1)").clone(true).appendTo("ul");
clone()方法是复制节点,方法中传递了一个参数true,复制元素的同时复制元素中所绑定的事件;也可以不带参数。
6.替换节点
1)replaceWith()方法的作用是将所有匹配的元素都替换成HTML或者DOM元素。
例:将页面中“<p title="选择你最喜欢的水果">你最喜欢的水果是?</p>”替换成“<strong>你最不喜欢的水果是?</strong>”
$("p").replaceWith("<strong>你最不喜欢的水果是?</strong>");
2)replaceAll()方法与replaceWith()方法功能相同,只是颠倒了replaceWith()操作。
$("<strong>你最不喜欢的水果是?<strong>").replaceAll("p");
注意:替换后,对象原先绑定的事件不复存在。
7.包裹节点
1)wrap()方法是一对一包裹。
例:<strong title="选择你最喜欢的水果">你最喜欢的水果是?</strong>
<strong title="选择你最喜欢的水果">你最喜欢的水果是?</strong>
$("strong").wrap("<b></b>");
结果:
<b><strong title="选择你最喜欢的水果">你最喜欢的水果是?</strong></b>
<b><strong title="选择你最喜欢的水果">你最喜欢的水果是?</strong></b>
2)wrapAll()方法用一个元素包裹所有匹配的元素。不同于wrap()方法。
对于1)中的例子,
$("strong").wrapAll("<b></b>");
结果:
<b><strong title="选择你最喜欢的水果">你最喜欢的水果是?</strong>
<strong title="选择你最喜欢的水果">你最喜欢的水果是?</strong></b>
注意:如果被包裹的多个元素间有其它元素,其它元素会被放到包裹元素之后。
3)wrapInner()方法将每一个匹配的元素的子内容(包括文本节点)用其他结构化的标记包裹起来。
例:<strong title="选择你最喜欢的水果">你最喜欢的水果是?</strong>
$("strong").wrapInner("<b></b>");
结果:
<strong title="选择你最喜欢的水果"><b>你最喜欢的水果是?</b></strong>
8.属性操作
1)获取属性和设置属性
var $para=$("p");
var p_txt=$para.attr("title"); //获取属性
$("p").attr("title","your title"); //设置单个属性
$("p").attr({"title":"your title","name":"test"});
2)删除属性
$("p").removeAttr("title");
9.样式操作
1)获取样式和设置样式
var $para=$("p");
var p_class=$para.attr("class"); //获取<p>的样式
$para.attr("class","high"); //设置<p>的样式 新的样式“high”替换旧的样式,没有追加
2)追加样式
$para.addClass("high"); //追加样式,如原来<p class="another"><p>,现在class="another high"
注意:attr()方法和addAttr()方法是有区别的。
3)移除样式
removeClass()方法是移除所有的样式,而带参数是移除参数对应的样式。
$para.removeClass("high").removeClass("another"); //一个一个地删除样式
$para.removeClass("another high"); //一次性删除两个样式
4)切换样式
toggle(function(){},function(){});
toggle()方法交替执行两个函数,主要是控制行为上的重复切换。
$para.toggleClass("high"); //第一次切换之后,class="another high"
5)判断是否含有某个样式
hasClass()可以用来判断元素中是否含有某个class。返回值为true/false。
$("p").hasClass("another");
注意:也可以用is()方法来判断。如:$("p").is("another");
10.设置和获取HTML、文本和值
1)html()方法,读取或设置某个元素中的HTML内容。类似javascript中的innerHTML属性。
$("p").html(); //获取html
$("p").html("<strong>你最喜欢的水果是?</strong>"); //设置html
注意:html()方法可以用于XHTML文档,但不能用于XML文档
2)text()方法,读取或设置某个元素中的文本内容。类似javascript中的innerText属性。
$("p").text(); //获取 <p>元素的文本内容
$("p").text("你最喜欢的水果是?"); //设置<p>元素的文本内容
3)val()方法,获取或设置元素的值。类似javascript中的value属性。
例:
$("#txtAddress").focus(function(){
var $address=$(this).val();
if($address="请输入邮箱地址"){
$(this).val("");
}
});
$("#txtAdress").blur(function(){
var $address=$(this).val();
if($address=""){
$(this).val("请输入邮箱地址");
}
});
注意:focus()方法相当于Javascript中的onfocus()方法,作用是处理获得焦点时的事件。
blur()方法相当于Javascript中的onblur()方法,作用是处理失去焦点的事件。
defaultValue属性获取表单元素的初始值(默认值),this.defaultValue。
另外,val()方法设置和改变select(下拉列表)、checkbox(多选框)和radio(单选框)的选中项。
例:
<select id="single">
<option>选择1号</option>
<option>选择2号</option>
<option>选择3号</option>
</select>
$("#single").val("选择2号"); //设置一个被选中
<select id="multiple" mutiple="multiple">
<option>选择1号</option>
<option>选择2号</option>
<option>选择3号</option>
</select>
$("#multiple").val(["选择2号","选择3号"]); //以数组的形式赋值,设置多个被选
<input type="checkbox" value="check1"/>多选1
<input type="checkbox" value="check2"/>多选2
<input type="checkbox" value="check3"/>多选3
<input type="checkbox" value="check4"/>多选4
$(":checkbox").val(["check1","check2"]); //多选框,设置多个值被选中
<input type="radio" value="radio1">单选1
<input type="radio" value="radio2">单选2
<input type="radio" value="radio3">单选3
$(":radio").value(["单选2"]); //单选框,设置一个值被选中
注意:对于设置元素被选中,可以使用val()方法,也可以使用attr()方法实现同样的功能。
$("#single option:eq(1)").attr("selected",true);
$("[value=radio2]:radio").attr("selected",true);
11.遍历节点
1)children()方法,获取匹配元素的子元素集合。
$("body").children(); //获取<body>元素下的子元素
$("p").children(); //获取<p>元素下的子元素
注意:children()方法只考虑子元素而不考虑其他后代元素。
2)next()方法,获取匹配元素后面紧邻的同辈元素。
$("p").next(); //取得紧邻<p>元素后一个同辈元素
3)prev()方法,获取匹配元素前面紧邻的同辈元素。
$("ul").prev(); //获取紧邻<ul>元素前一个同辈元素
4)siblings()方法,获取匹配元素前后所有的同辈元素。
$("p").siblings(); //获取<p>元素的同辈元素
5)closest()方法,获取最近的匹配元素。首先检查当前元素是否匹配,如果匹配则直接返回元素本身。如果不匹配则向上查找父元素,逐级向上直到找到 匹配选择器的元素,如果什么都没有找到则返回一个空的jQuery对象。
//给点击的目标元素的最近的li元素添加颜色
$(document).bind("click",function(e){
$(e.targe).closet("li").css("color","red");
})
6)parent(),parents()与closet()的区别
| 方法 | 描述 | 示例 |
| parent() | 获得集合中每个匹配元素的父级元素 |
$(".high").parent().css("color","red"); parent()方法从指定类型的直接父节点开始查找, parent()方法返回一个元素节点。 |
| parents() | 获得集合中每个匹配元素的祖先元素 |
$(".high").parents("ul").css("backgroud-color","red"); parents()方法查找方式同parent()方法类似,不同的一点在于, 当它找到第一个父节点时并没有停止查找而是继续查找,最后返回 多个父节点。 |
| closet() | 从元素本身开始,逐级向上级元素匹配,并返回最先匹配的祖先元素 |
$(".high").closet("ul").css("background-color","red"); closet()方法查找是从包含自身的节点找起,它同parents()方法类似, 不同点就在于它只返回匹配的第一个元素节点。 |
12.CSS-DOM操作
CSS-DOM就是读取和设置style对象的各种属性。style属性很有用,但最大不足是无法通过它来提取到通过外部CSS设置的样式信息。
$("p").css("color"); //获取<p>元素的样式颜色
$("p").css("color","red"); //设置<p>元素的样式颜色
$("p").css({"fontsize":"30px","background-color":"#888888"}); //设置多个样式属性
注意:1)如果值为数字,将会被自动转换为像素值。
2)在css()方法中,如果属性中带有“-”符号,例如font-size和background-color属性,如果在设置这些属性的值的时候不带引号,那么就要用驼峰式写法,如:$("p").css({fontSize:"30px",backgroundColor:"#888888"});如果带上引号,既可以写成“font-size”,又可以写 成“fontSize”。
$("p").css("opacity","0.5"); //直接使用opacity属性来设置透明度
$("p").css("height"); //获取<p>元素的样式高度
$("p").height(); //获取<p>元素的高度值
$("p").height(100); //设置<p>元素的高度值为100px
$("p").height("10em"); //设置<p>元素的高度值为10em
注意:css()方法获取的高度值与样式的设置有关,可能会得到"auto",也可能得到"10px"之类的字符串;而height()方法获取的高度值则是元素在页面中 的实际高度,与样式的设置无关,而且不带单位。
$("p").width(); //与height()方法类似,获取<p>元素的宽度值
$("p").width("400px"); //与height()方法类似,设置<p>元素的宽度值
1)offset()方法,获取元素在当前视窗的相对位移,其中返回的对象包含两个属性,即top和left,它只对可见元素有效。
var offset=$("p").offset(); //获取<p>元素的offset();
var left=offset.left; //获取左偏移
var top=offset.top; //获取右偏移
2)position()方法,获取元素相对于最近的一个position样式属性设置为relative或者absolute的祖父节点的相对位置。
var position=$("p").position(); //获取<p>元素的position()
var left=position.left; //获取左偏移
var top=position.top; //获取右偏移
3)scrollTop()方法和scrollLeft()方法,分别获取元素的滚动条距顶端的距离和距左侧的距离。
var $p=$("p");
var scrollTop=$p.scrollTop(); //获取元素的滚动条距顶端的距离
var scrollLeft=$p.scrollLeft(); //获取元素的滚动条距左侧的距离
$p.scrollTop(300); //元素的竖直滚动条滚动到指定的位置
$p.scrollLeft(300); //元素的横向滚动条滚动到指定的位置
posted on
浙公网安备 33010602011771号