《锋利的jQuery》学习笔记---第3章 jQuery中的DOM操作

1.创建元素节点

例如,创建两个<li>元素节点,并加入到<ul>
首先创建元素节点

var $li_1=$("<li></li>");
var $li_2=$("<li></li>");

   
   
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

然后蒋新创建的节点插入文档中

$("ul").append($li_1);
$("ul").append($li_2);/*也可以写成$("ul").append($li_1).append($li_2)*/
   
   
  • 1
  • 2
  • 1
  • 2

2.创建文本节点

创建文本节点就是在创建元素节点时直接把文本内容写出来,然后使用append()等方法将其添加到文档中

var $li_1=$("<li>a</li>");
var $li_2=$("<li>b</li>");
$("ul").append($li_1);
$("ul").append($li_2);

   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

无论$(html)中的html代码多复杂都可以这样创建 ,例如:

$("<li><em>这是</em><b>一个</b><a href="#">复杂的组合 </a></li>")
   
   
  • 1
  • 1

3.创建属性节点

var $li_1=$("<li title='a'>a</li>");
var $li_2=$("<li title='b'>b</li>");
$("ul").append($li_1);
$("ul").append($li_2);

   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

4.插入节点
1.append()   向每个匹配的元素内部追加内容
示例:

 HTML代码:
<p>我想说:</p>
JQuery代码:$("p").append("<b>你好</b>");
结果:<p>我想说:<b>你好</b></p>
   
   
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

2.appendTo()  将所有匹配的元素追加到指定的元素中
示例:

 HTML代码:
<p>我想说:</p>
JQuery代码:$("<b>你好</b>").appendTo("p")
结果:<p>我想说:<b>你好</b></p>
   
   
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

3.prepend()  向每个匹配的元素内部前置内容
示例:

 HTML代码:
<p>我想说:</p>
JQuery代码:$("p").prepend("<b>你好</b>")
结果:<p><b>你好</b>我想说:</p>
   
   
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

4.prependTo() 将所有元素前置到指定元素中
示例:

 HTML代码:
<p>我想说:</p>
JQuery代码:$("<b>你好</b>").prependTo("p")
结果:<p><b>你好</b>我想说:</p>
   
   
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

5.after()  在每个匹配元素之后插入内容
示例:

 HTML代码:
<p>我想说:</p>
JQuery代码:$("p").after("<b>你好</b>")
结果:<p>我想说:</p><b>你好</b>
   
   
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

6.insertAfter() 将所有匹配元素插入到指定元素的后面
示例:

 HTML代码:
<p>我想说:</p>
JQuery代码:$("<b>你好</b>").insertAfter("p")
结果:<p>我想说:</p><b>你好</b>
   
   
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

7.before()  在每个元素之前插入内容
示例:

 HTML代码:
<p>我想说:</p>
JQuery代码:$("p").before("<b>你好</b>")
结果:<b>你好</b><p>我想说:</p>
   
   
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

8.insertBefore()  将所有匹配的元素插入到指定的元素的前面
 示例:
 

 HTML代码:
<p>我想说:</p>
JQuery代码:$("<b>你好</b>").insertBefore("p")
结果:<b>你好</b><p>我想说:</p>
   
   
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

5.删除节点
1.remove() 从DOM中删除所有匹配元素,传入的参数用于根据jQuery表达式来筛选元素。当某个节点用remove()方法删除后,该节点所包含的所有后代节点都将被删除,这个方法的返回值是一个指向已被删除的节点的引用,因此还可以继续使用这些元素
示例:

var $li=$("ul li:eq(1)").remove();//获取该节点后将其从网页中删除
$("ul").append($li);//把刚才删除的节点又加回来了
   
   
  • 1
  • 2
  • 1
  • 2

上述代码可以简化为:

$("ul li:eq(1)").appendTo("ul");
//appendTo()可用来移动元素
//移动元素时首先从文档上删除此元素,然后将该元素插入得到文档中的指定节点
   
   
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

另外 remove()方法也可以通过传递参数来选择地删除元素
$(“ul li”).remove(“li[title!=a]”);//将li中title不等于a的<li>元素删除

2.detach()   也是从DOM中去掉所有匹配元素,但是不会把匹配的元素从jQuery对象中删除,因而可以在将来使用这些匹配元素,与remove()不同的是,所有绑定的事件、附加的数据等都会保留下来.
示例:

$("ul li").click(function(){
alert($(this).html());
})
var $li=$("ul li:eq(1)").detach();//删除元素
$li.appndTo("ul");//重新追加此元素,发现之前的点击事件还能用,如果是remove()则不能再用。

   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

3.empty()
严格来讲,empty()并不是删除节点,而是清空节点,他能清空元素中的所有后代节点

$("ul li:eq(1)").empty();
//此时清空了第二个<li>里的内容(注意是元素里),而这个节点符号标记还在,
   
   
  • 1
  • 2
  • 1
  • 2

6.复制节点
clone()
如:点击一个li元素后再复制一个li元素,再将其添加到ul中

$("ul li").click(function(){
$(this).clone().appendTo("ul");
})
   
   
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

新复制的节点并不具有任何行为(如之前的单击事件),如果希望复制元素的同时能够复制元素绑定的事件则:

$(this).clone(true).appendTo("body");
   
   
  • 1
  • 1

7.替换节点
replaceWith() 和 replaceAll作用相同,只是操作相互颠倒
如想把<p title="a">a</p>换成<strong>b</strong>可以如下写代码:
法一:$("p").replaceWith("<strong>b</strong>");
法二:$("<strong>b</strong>").replaceAll("p");

如果在替换之前已经为元素绑定事件,替换后原先绑定的事件会与被,替换的元素一起消失,需要在新元素上重新绑定事件。

8.包裹节点

1.wrap() 将某个节点用其他标记包裹起来(将所有元素进行单独的包裹)
如:$("strong").wrap("<b></b>");
得到的结果为:<b><strong>b</strong></b>

2.wrapAll() 将所有匹配元素用一个元素来包裹。
HTML代码如下:

<strong>a</strong>
<strong>b</strong>
   
   
  • 1
  • 2
  • 1
  • 2

如果使用wrap() ,则结果如下:

<b><strong>a</strong></b>
<b><strong>b</strong></b>
   
   
  • 1
  • 2
  • 1
  • 2

如果是 wrapAll() 结果如下:

<b><strong>a</strong>
<strong>b</strong></b>
   
   
  • 1
  • 2
  • 1
  • 2

如果被包裹的多个元素之间有其他元素,那么其他元素会被放到包裹元素之后

3.wrappInner()将每一个匹配元素的子内容(包括文本节点)用其他结构化标记包裹起来
示例:

$("strong").wrapInner("<b></b>");
   
   
  • 1
  • 1

结果如下:

<strong title=""><b>aaa<b></strong>
   
   
  • 1
  • 1

9.属性操作
用attr()获取和设置元素属性 ,removeAttr()来删除元素属性

1.获取属性和设置属性

var $para=$("p");
var para_txt=$para.attr("title");//获取属性title的值
$("p").attr("title","your title");//设置属性title的值为your title
$("p").attr({"title":"your title","name":"your name"});//为一个元素设置多个属性
   
   
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

注意: jQuery中很多方法都是同一个函数实现获取和设置的,例如 attr() 技能获取属性的值,也能设置属性的值。类似的还有html()、text()、height()、width()、val()、css()等方法

2.删除属性

$("p").removeAttr("title");
   
   
  • 1
  • 1

prop()  prop()函数用于设置或返回当前jQuery对象所匹配的元素的属性值。prop()函数的所有”设置属性”操作针对的是当前jQuery对象所匹配的每一个元素;所有”读取属性”的操作只针对第一个匹配的元素。
 示例(代码来自网络,点击查看):
 

以下面这段HTML代码为例:

<div id="n1">
    <p id="n2" class="demo test" data-key="UUID" data_value="1235456465">CodePlayer</p>
    <input id="n3" name="order_id" type="checkbox" value="1">
    <input id="n4" name="order_id" type="checkbox" checked="checked" value="2">
</div>
我们编写如下jQuery代码:

var $n2 = $("#n2");
// prop()操作针对的是元素(Element对象)的属性,而不是元素节点(HTML文档)的属性
document.writeln( $n2.prop("data-key") ); // undefined
document.writeln( $n2.prop("data_value") ); // undefined

document.writeln( $n2.prop("id") ); // n2
document.writeln( $n2.prop("tagName") ); // P
document.writeln( $n2.prop("className") ); // demo test
document.writeln( $n2.prop("innerHTML") ); // CodePlayer
document.writeln( typeof $n2.prop("getAttribute") ); // function

// prop()设置的属性也是针对元素(Element对象),因此也可以通过元素本身直接访问
$n2.prop("prop_a", "CodePlayer");
document.writeln( $n2[0].prop_a ); // CodePlayer
var n2 = document.getElementById("n2");
document.writeln( n2.prop_a ); // CodePlayer

// 以对象形式同时设置多个属性,属性值可以是对象、数组等任意类型
$n2.prop( { 
    prop_b: "baike",
    prop_c: 18,
    site: { name: "CodePlayer", url: "http://www.365mini.com/" }
} );
document.writeln( $n2[0].prop_c ); // 18
document.writeln( $n2[0].site.url ); // http://www.365mini.com/

// 反选所有的复选框(没选中的改为选中,选中的改为取消选中)
$("input:checkbox").prop("checked", function(index, oldValue){
    return !oldValue;
});
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

removeProp()函数用于移除在当前jQuery对象所匹配的每一个元素上指定的属性。
window对象或DOM元素的一些内置属性是不允许删除的,如果试图删除这些属性,将会导致浏览器产生一个错误。jQuery首先会将该属性的值赋为undefined,并忽略掉浏览器生成的任何错误信息。

一般情况下,你最好使用该函数来删除一些自定义的属性,而不是内置属性。

请不要使用本函数来删除DOM元素的本地属性checked、selected和disabled。这将彻底删除对应的属性,并且,一旦删除之后,你无法再向该DOM元素重新添加对应的属性。请使用prop()函数将其设为false即可,例如:jQueryObject.prop(“checked”, false)。

示例(代码来自网络,点击查看):

以下面这段HTML代码为例:

<div id="n1">
    <p id="n2" class="demo test" data-key="UUID" data_value="1235456465">CodePlayer</p>
</div>
我们编写如下jQuery代码:

var $n2 = $("#n2");
$n2.prop("prop_a", "CodePlayer");
$n2.prop( "prop_b", { name: "CodePlayer", age: 20 } );
document.writeln( $n2.prop("prop_a") ); // CodePlayer
document.writeln( $n2.prop("prop_b") ); // [object Object]

// 删除n2Element对象上的属性prop_a和prop_b
$n2.removeProp("prop_a");
$n2.removeProp("prop_b");
document.writeln( $n2.prop("prop_a") ); // undefined
document.writeln( $n2.prop("prop_b") ); // undefined

// removeProp()只是删除元素(Element对象)自身的data-key属性
// 由于其自身并没有data-key属性,因此不会删除任何属性
// 也不会对上面id为n2的元素节点(HTML文档)的data-key属性造成影响
$n2.removeProp("data-key");
document.writeln( $n2.prop("data-key") ); // undefined
// 通过attr()访问元素文档节点中的属性
document.writeln( $n2.attr("data-key") ); // UUID
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

jQuery函数attr()和prop()的区别

在jQuery中,attr()函数和prop()函数都用于设置或获取指定的属性,它们的参数和用法也几乎完全相同。

但不得不说的是,这两个函数的用处却并不相同。下面我们来详细介绍这两个函数之间的区别。
[解析来自网络,点击查看](http://www.365mini.com/page/jquery-attr-vs-prop.htm)

1、操作对象不同

很明显,attr和prop分别是单词attribute和property的缩写,并且它们均表示"属性"的意思。

不过,在jQuery中,attribute和property却是两个不同的概念。attribute表示HTML文档节点的属性,property表示JS对象的属性。

<!-- 这里的id、class、data_id均是该元素文档节点的attribute -->
<div id="message" class="test" data_id="123"></div>

<script type="text/javascript">
// 这里的name、age、url均是obj的property
var obj = { name: "CodePlayer", age: 18, url: "http://www.365mini.com/" };
</script>
在jQuery中,prop()函数的设计目标是用于设置或获取指定DOM元素(指的是JS对象,Element类型)上的属性(property);attr()函数的设计目标是用于设置或获取指定DOM元素所对应的文档节点上的属性(attribute)。

<!-- attr()函数针对的是该文档节点的attribute -->
<div id="message" class="test" data_id="123"></div>

<script type="text/javascript">
// prop()函数针对的是该DOM元素(msg)自身的property
var msg = document.getElementById("message");
var $msg = $(msg);
</script>
当然,在jQuery的底层实现中,函数attr()和prop()的功能都是通过JS原生的Element对象(如上述代码中的msg)实现的。attr()函数主要依赖的是Element对象的getAttribute()和setAttribute()两个方法。prop()函数主要依赖的则是JS中原生的对象属性获取和设置方式。

<div id="message" class="test" data_id="123"></div>
<script type="text/javascript">
var msg = document.getElementById("message");
var $msg = $(msg);

/* *** attr()依赖的是Element对象的element.getAttribute( attribute ) 和 element.setAttribute( attribute, value ) *** */

// 相当于 msg.setAttribute("data_id", 145);
$msg.attr("data_id", 145);

// 相当于 msg.getAttribute("data_id");
var dataId = $msg.attr("data_id"); // 145



/* *** prop()依赖的是JS原生的 element[property] 和 element[property] = value; *** */

// 相当于 msg["pid"] = "pid值";
$msg.prop("pid", "pid值");

// 相当于 msg["pid"];
var testProp = $msg.prop("pid"); // pid值
</script>
当然,jQuery对这些操作方式进行了封装,使我们操作起来更加方便(比如以对象形式同时设置多个属性),并且实现了跨浏览器兼容。

此外,虽然prop()针对的是DOM元素的property,而不是元素节点的attribute。不过DOM元素某些属性的更改也会影响到元素节点上对应的属性。例如,property的id对应attribute的id,property的className对应attribute的class。

<div id="message" class="test" data_id="123"></div>
<script type="text/javascript">
var msg = document.getElementById("message");
var $msg = $(msg);

document.writeln( $msg.attr("class") ); // test
$msg.prop("className", "newTest");
// 修改className(property)导致class(attitude)也随之更改
document.writeln( $msg.attr("class") ); // newTest
</script>
2、应用版本不同

attr()是jQuery 1.0版本就有的函数,prop()是jQuery 1.6版本新增的函数。毫无疑问,在1.6之前,你只能使用attr()函数;1.6及以后版本,你可以根据实际需要选择对应的函数。

3、用于设置的属性值类型不同

由于attr()函数操作的是文档节点的属性,因此设置的属性值只能是字符串类型,如果不是字符串类型,也会调用其toString()方法,将其转为字符串类型。

prop()函数操作的是JS对象的属性,因此设置的属性值可以为包括数组和对象在内的任意类型。

4、其他细节问题

在jQuery 1.6之前,只有attr()函数可用,该函数不仅承担了attribute的设置和获取工作,还同时承担了property的设置和获取工作。例如:在jQuery 1.6之前,attr()也可以设置或获取tagName、className、nodeName、nodeType等DOM元素的property。

直到jQuery 1.6新增prop()函数,并用来承担property的设置或获取工作之后,attr()才只用来负责attribute的设置和获取工作。

此外,对于表单元素的checked、selected、disabled等属性,在jQuery 1.6之前,attr()获取这些属性的返回值为Boolean类型:如果被选中(或禁用)就返回true,否则返回false。

但是从1.6开始,使用attr()获取这些属性的返回值为String类型,如果被选中(或禁用)就返回checked、selected或disabled,否则(即元素节点没有该属性)返回undefined。并且,在某些版本中,这些属性值表示文档加载时的初始状态值,即使之后更改了这些元素的选中(或禁用)状态,对应的属性值也不会发生改变。

因为jQuery认为:attribute的checked、selected、disabled就是表示该属性初始状态的值,property的checked、selected、disabled才表示该属性实时状态的值(值为true或false)。

因此,在jQuery 1.6及以后版本中,请使用prop()函数来设置或获取checked、selected、disabled等属性。对于其它能够用prop()实现的操作,也尽量使用prop()函数。

<input id="uid" type="checkbox" checked="checked" value="1">

<script type="text/javascript">
// 当前jQuery版本为1.11.1
var uid = document.getElementById("uid");
var $uid = $(uid);

document.writeln( $uid.attr("checked") ); // checked
document.writeln( $uid.prop("checked") ); // true

// 取消复选框uid的选中(将其设为false即可)
// 相当于 uid.checked = false;
$uid.prop("checked", false);

// attr()获取的是初始状态的值,即使取消了选中,也不会改变
document.writeln( $uid.attr("checked") ); // checked
// prop()获取的值已经发生变化
document.writeln( $uid.prop("checked") ); // false
</script>
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110

10.样式操作

1.追加样式
addClass()
首先在<style>标签里添加另一组样式:

<style>
.high{
    font-weight:bold;
    color:red;
    }
.another{
        font-style:italic;/*斜体*/
        color:blue;
        }
</style>
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

原本代码:<p class="high" title="">abc</p>
执行:$("p").addClass("another");
此时 p的class为“high  another”
如果给一个元素添加了多个class值,那么就相当于合并了他们的样式;如果有不同的class设定了同一个样式属性,则后者覆盖前者。

2.移除样式

$("p").removeClass("high");
   
   
  • 1
  • 1

或者两个都删除:

`$("p").removeClass("high").removeClass("another");`
$("p").removeClass("high  another");
   
   
  • 1
  • 2
  • 1
  • 2

移除所有class:$("p").removeClass();

3.切换样式

toggleClass()控制样式的重复切换,如果类名存在就删除,类名不在就添加
若本来<p class="myclass"></p>,
jQuery语句为:$("p").toggleClass("another");
点击切换样式按钮,则变成<p class="myclass another"></p>,
再点击一次切换按钮 ,则又变成<p class="myclass"></p>
不断点击他就会在这两种情况中来回切换

4.判断是否含有某个样式
hasClass()判断是否含有某个class 有返回true 没有返回false

 $("p").hasClass("another")
   
   
  • 1
  • 1

11.设置和获取HTML、文本和值

1.html() 用来读取或设置 某个元素中的HTML内容,可用于XHTML文档,不能用于XML文档
示例:<p><strong>q</strong></p>
jQuery:$("p").html()
获得的结果是:<strong>q</strong>

设置p元素的html代码:$("p").html("<strong>p</strong>")

2.text() 用来读取或设置某个元素的文本内容

获取内容:$("p").text()
设置内容:$("p").text("你最喜欢的水果是?")

3.val()方法 用来获取或设置元素的值

$("p").val();
$("p").val("aaa");
另外,如果this是当前的文本框,则this.defaltValue是当前选中文本框的默认值
$("p").value(this.defaultValue);
   
   
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

另外,val()能使select(下拉列表框)、checkbox(多选框)和radio(单选框)相应的选项被选中,这在表单操作中经常会用到
示例:

HTML代码:
 <select id="multiple" multiple="multiple" style="height:120px">
  <option selected="selected">选择1号</option>
  <option >选择2号</option>
  <option >选择3号</option>
  <option >选择4号</option>
  <option selected="selected">选择5号</option>
  </select>
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

这里写图片描述

如果要使第2,3项被选中,则$("#multiple").val(["选择2号","选择3号"]) ;//以数组形式给出
这里写图片描述
或者单独一个$("#multiple").val("选择2号");
或者用attr(): $("#multiple option:eq(1)").attr("selected","true");

select对应selected ;radio对应checked

12.遍历节点

1.children() 取得匹配元素的子元素集合,此方法只考虑子元素,不考虑其他后代元素。
示例HTML代码:

<body>
  <p></p>
  <ul>
    <li></li>
    <li></li>
  </ul>
</body>
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

jQuery求子元素个数:

var $body=$("body").children;
alert($body.length);//得到2
   
   
  • 1
  • 2
  • 1
  • 2

2.next() 取得匹配元素后紧邻的同辈元素
根据上个html例子

$("p").next()得到的结果是:
<ul>
  <li></li>
  <li></li>
</ul>
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

3.prev() 得到匹配元素前面紧邻的同辈元素

$("ul").prev()//得到结果为<p></p>
   
   
  • 1
  • 1

4.siblings() 取得匹配元素前后所有同辈元素

$("p").siblings()
//得到结果为:
<ul>
 <li></li>
 <li></li>
</ul>

   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

6.closest() 取得最近的匹配元素

首先检查当前元素是否匹配,如果匹配则直接返回元素本身 ,如果不匹配则向上查找父元素,逐级向上查找匹配选择器的元素,如果什么都没有则返回一个空的jQuery对象(只返回匹配的第一个元素节点,从自身的节点找起)

给点击目标最近的li元素添加红色:

$(document).bind("click",function(e){
$(e.target).closest("li").css("color","red");
})
   
   
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

7.parent() 获得每个匹配元素的父级元素,从指定类型的直接父节点开始查找,返回一个元素节点

8.parents() 获得每个匹配元素的祖先元素 返回多个父节点

13.CSS-DOM操作
读取和设置style对象的各种属性
css()获取元素的样式属性:$("p").css("color");
css()设置元素的单个样式:$("p").css("color","red")
css(0设置元素多个样式:
$("p").css({"fontsize":"30px","backgroundColor":"red"})
透明度设置为半透明$("p").css("opacity","0.5")
获取元素高度:$("p").css("height")或者$("p").height()
设置元素高度:$("p").height(100)//如果是数字会自动转化为px
注意:css()获取的高度值与样式的设置有关,可能得到“auto”,也可能得到“10px”之类,但是height获取的高度值是元素在页面中的实际高度,而且不带单位,与样式的设置无关

类似的还有width()

关于元素定位有以下几个常用方法

1.offset()  获取元素在当前视窗的相对偏移,其中返回的对象包含top和left两个属性,向右为正,向下为正,只对可见元素有效,返回值 为object类型

var offset=$("p").offset();
var left=offset.left;
var top=offset.top;
   
   
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

2.position() 获取元素相对于最近的一个position样式属性设置为relative或者absolute的祖父节点的相对偏移,返回对象有两个属性 top与left

var position =$("p").position();
var left=position.left;
var top=position.top;
   
   
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

3.scrollTop()和scrollLeft()
获取滚动条距离左端的距离和顶端的距离

var scrollTop=$("p").scrollTop();
var scrollLeft=$("p").scrollLeft();
   
   
  • 1
  • 2
  • 1
  • 2

也可以指定参数

$("textarea").scrollTop(300);
$("textarea").scrollLeft(300);
   
   
  • 1
  • 2
  • 1
  • 2

案例研究

某网站的超链接
鼠标滑过使title提示快速显示,并且随着鼠标的移动提示也相应跟随移动

<script type="text/javascript">

    $(function() {
        var x=10;
        var y=20;
       $("a.tooltip").mouseover(function(e){
    this.myTitle=this.title;
    this.title="";

    var tooltip="<div id='tooltip'>"+this.myTitle+"</div>";
    $("body").append(tooltip);
    $("#tooltip")
    .css({
        "top":(e.pageY+y)+"px",
        "left":(e.pageX+x)+"px"
        }).show("fast");
    }).mouseout(function(){
        this.title=this.myTitle;
         $("#tooltip").remove();   
        }).mousemove(function(e){
            $("#tooltip")
            .css({
                "top":(e.pageY+y)+"px",
                "left":(e.pageX+x)+"px"

                });
            });
    });
</script>
<style>
body{
    margin:0;
    padding:40px;
    background:#fff;
    font:80% Arial, Helvetica, sans-serif;
    color:#555;
    line-height:180%;
}
p{
    clear:both;
    margin:0;
    padding:.5em 0;
}
/* tooltip */
#tooltip{
    position:absolute;
    border:1px solid #333;
    background:#f7f5d1;
    padding:1px;
    color:#333;
    display:none;
}
</style>
<body>
  <p><a href="" class="tooltip" title="这是我的超链接提示1">提示1</a></p>
  <p><a href="" class="tooltip" title="这是我的超链接提示  2">提示2</a></p>
  <p><a href="" title="这是自带提示1">自带提示1</a></p>
  <p><a href="" title="这是自带提示2">自带提示2</a></p>
</body>
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59

效果图:
修改效果后

修改效果前

图片提示效果

预览
生成图片预览效果,根据鼠标移动
代码如下:

<script type="text/javascript">
$(function(){
    var x=10;
    var y=20;
    $("a.tooltip").mouseover(function(e) {
        this.myTitle=this.title;
        this.title="";
        var imgTitle=this.myTitle?"<br />"+this.myTitle:"";
        var tooltip="<div id='tooltip'><img src='"+this.href+"' alt='产品预览图'>"+imgTitle+"</div>";
        $("body").append(tooltip);
        $("#tooltip")
        .css({
            "top":(e.pageY+y)+"px",
            "left":(e.pageX+x)+"px"
            }).show("fast");
    }).mouseout(function(){
        this.title=this.myTitle;
        $("#tooltip").remove();
        }).mousemove(function(e){
            $("#tooltip")
            .css({
                "top":(e.pageY+y)+"px",
            "left":(e.pageX+x)+"px"
                });
            });
    });
</script>
<style type="text/css">
body{
    margin:0;
    padding:40px;
    background:#fff;
    font:80% Arial, Helvetica, sans-serif;
    color:#555;
    line-height:180%;
}
img{border:none;}
ul,li{
    margin:0;
    padding:0;
}
li{
    list-style:none;
    float:left;
    display:inline;
    margin-right:10px;
    border:1px solid #AAAAAA;
}

/* tooltip */
#tooltip{
    position:absolute;
    border:1px solid #ccc;
    background:#333;
    padding:2px;
    display:none;
    color:#fff;
}
</style>
</head>

<body>
  <ul>
  <li><a href="images/apple_1_bigger.jpg" class="tooltip" title="apple ipod"><img src="images/apple_1.jpg" alt="apple ipod"></a></li>
  <li><a href="images/apple_2_bigger.jpg" class="tooltip" title="apple ipod nano"><img src="images/apple_2.jpg" alt="apple ipod nano"></a></li>
  <li><a href="images/apple_3_bigger.jpg" class="tooltip" title="apple iphone"><img src="images/apple_3.jpg" alt="apple iphone"></a></li>
  <li><a href="images/apple_4_bigger.jpg" class="tooltip" title="apple Mac"><img src="images/apple_4.jpg" alt="apple Mac"></a></li>

  </ul>
</body>
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值