第2章 元素查找方法

在处理页面元素之前,首先要做的事情就是找到被处理的元素。在DOM模型中,比较常用的是文档对象(document)的getElementBy<Selector>(…)方法:

document.getElementById(elementId),根据元素的ID属性查找。

document.getElementsByName(elementName),根据元素的Name属性查找。

document.getElementsByTagName(tagName),根据元素的标签名查找。

使用这三种查找方式,可以满足大部分要求。除此之外,还可以使用元素间的“父子”关系在DOM树形结构中进行查找所需要的元素。

JQuery框架中提供了更加强大的功能进行元素的搜索,我们可以使用各种选择器十分方便的找出页面中任何满足条件(由Selector指定)的元素。本章中,主要讲解JQuery框架中Selector(选择器)的基本用法。

 

1. 基本选择器

wps_clip_image-416

图2-1

在样式表中,也有选择器,共有三种基本选择器:ID选择器、标签选择器、类选择器,以及这三种基本选择器的组合选择。样式表中选择器的用法这里不做过多的介绍。

幸运的是,JQuery延续了CSS选择器的的语法。JQuery定义了四种基本的选择器,前三种与CSS选择器一样,最后一种为“*”,表示选择页面(或元素)中所有的HTML元素,该选择器不常用,本节不做介绍。

 

1) ID 选择器

样式表中,我们使用“#”作为ID选择器的前缀,后跟HTML元素的ID名称,如“#container”表示页面中ID为“container”的元素。JQuery中可以直接使用ID选择器选中页面中唯一的一个HTML元素,语法如下:

jQuery(“#elementId”) 或 $(“#elementId”)

参数#elementId:要选择元素的ID

返回值:JQuery对象

值得注意的是,ID选择器的返回值为JQuery对象,并非HTML元素,所以可以使用JQuery框架提供的所有功能作用于HTML元素。

阅读下面HTML代码(图2-2),我们希望统计ID为container的DIV中元素的个数,使用ID选择器,和*选择器,以及上一章中学习过的“JQuery 元素访问”函数,我们可以轻松解决。

wps_clip_image-960

图2-2

首先使用JQuery获取DIV:

var ele = jQuery(“#container”);

变量ele则表示封装了DIV的JQuery对象,使用该JQuery对象找出所有的子元素:

var children = ele.find(“*”);

find函数在后面章节介绍,find函数的参数部分,我们提供了一个“*”选择器,表示获取ele中的所有子元素,返回值也是JQuery对象,接着使用上一章学习的JQuery对象的size()函数统计元素总数。

var count = children.size();

到这里,就得到了元素总数count。

JQuery也允许以Chain(链)的方式编写代码,以上三上代码可以简写为:

var count = $("#container").find("*").size();

alert(“Total Elements Count: “ + count);

运行代码,我们将得到一个消息框,显示“Total Elements Count: 9”,一共9个元素。完整的代码如下(其中body部分在以下小将节直接引用,不再提示):

<html xmlns="http://www.w3.org/1999/xhtml" >

<head>

    <title>JQuery</title>

    <script type="text/javascript" src="jquery-1.3.2.js"></script>

    <script type="text/javascript">

jQuery(function() {

var count = $("#container").find("*").size();

alert(count);

});

    </script>

</head>

<body>

<div id="container">

<ul>

<li>C# Programming Language</li>

<li class=”myStyle”>ADO.NET</li>

<li>JSP Web Application</li>

</ul>

<ul>

<li>JSP Servlet</li>

<li class=”myStyle”>Struts Spring Hibernate</li>

<li>JQuery</li>

<li>ASP.NET</li>

</ul>

</div>

</body>

</html>

 

1) 标签选择器

前面ID选择器可以精确的定位到页面中的特定元素,标签选择器和类选择器则用于获取一个满足条件的元素集合。在CSS中,标签选择器将将样式使用在所有的指定标签上,JQuery中的标签选择器则是获取所有指定标签的元素,并作为一个JQuery对象返回。语法如下:

jQuery(“tag-name”) 或 $(“tag-name”)

参数tag-name:元素标签名

返回值:JQuery对象

值得注意的是,标签选择器的返回值为JQuery对象,并非HTML元素,所以可以使用JQuery框架提供的所有功能作用于HTML元素。

现在要获取页面所有UL元素,让他们水平排列。在编写JQuery代码前,页面中有两个UL元素,位于ID为container的DIV标签中,显示效果如下图2-3:

wps_clip_image-2411

图2-3

在JQuery的Load事件中添加如下代码,修改UL的样式(其中样式操作函数css在后面章节将详细讲解):

jQuery("ul").css("float", "left");

代码执行后,运行效果如下图2-4:

wps_clip_image-2525

图2-4

我们也可以轻松找到页面中所有的LI元素,将其样式设置为none或设置为图片……。

jQuery("ul").css("float", "left");

jQuery("li").css("list-style", "none");

wps_clip_image-2648

图2-5

 

2) 类选择器

经过前两个选择器的学习,相信熟悉CSS的朋友现在已经猜到类选择器的用法了,还是与CSS的类选择器一样。不错,JQuery不会让你失望,类选择器的使用方法还是十分简单:

jQuery(“.className”) 或 $(“.className”)

参数.className:样式的类名称。

返回值:JQuery对象

注意,在className前面还有一个”.”,一定不要忘记!另外,类选择器的返回值为JQuery对象,并非HTML元素,所以可以使用JQuery框架提供的所有功能作用于HTML元素。

要找出页面中带有样式“myStyle”的元素,并将元素的字体颜色设置为红色,在JQuery的Load事件中编写如下代码:

jQuery(".myStyle").css("color", "Red");

运行结果如下图2-6:

wps_clip_image-3023

图2-6

总之,JQuery的三种基本选择器使用十分简洁,同时不失强大的功能;另外,这三种基本选择器还可以随意的进行组合使用,甚至可以添加特殊的过滤条件。JQuery处处都会给你带来惊喜。

 

1. Path(组合)选择器

顾名思义,组合选择器就是将多个Selector(选择器)以合理的规则组合在一起,构成一个复杂的选择器,语法如下:

[Selector1] 组合 [Selector2] 组合 … 组合 [SelectorN]

其中,Selector可以为任意的基本选择器,各选择器间构成了一种层次关系。

注意:各选择器间使用合法的“选择器链接符号(规则)”,针对不同的规则,JQuery的查找方式不同。JQuery框架中支持四种链接符号:

空格:普通组合。

大于号(>):父子(父元素、子元素)组合。

加号(+):前后组合。

波浪号(~):前后(同一级元素)组合。

下面各节将详细介绍。

 

1) 普通组合

wps_clip_image-3425

图2-7

在上面的样式表中,定义了三个样式,一个ID选择器,一个标签(li)选择器,一个组合选择器(li .myStyle)。这个组合选择器用于定义所有li标签的子元素中,拥有myStyle样式类的元素,设置其字体为红颜色。对于组合选择器,你也可以理解成:

SELECT Tag FROM Li WHERE Tag HAS ‘myStyle’

这个组合,其实就是相当于再加上一个Where(条件),所以不难理解组合选择器的作用。

JQuery中的组合选择器也是如此,如果要找出页面中所有带“myStyle”样式的LI标签的子元素,使用JQuery就可以简单的写成:

jQuery(“li .myStyle”)

返回值为JQuery对象,封装的是LI标签的子元素,而不是LI标签本身。另外,组合选择器中的每一个Selector(选择器)间使用空格分开。有如下HTML代码:

<form>

  <label>Name:</label>

  <input name="name" />

  <fieldset>

      <label>Newsletter:</label>

      <input name="newsletter" />

</fieldset>

</form>

<input name="none" />

现有JQuery代码如下:

$("form input")

那么该JQuery代码返回的JQuery对象为:

[ <input name="name" />, <input name="newsletter" /> ]

 

3) parent > child

父子(父元素、子元素)组合与普通组合十分相似,所不同的是他们查找的层次不一样。普通组合会在在子元素的树内查找,而父子组合仅仅查找子元素这一级。有如下HTML代码:

<form>

  <label>Name:</label>

  <input name="name" />

  <fieldset>

      <label>Newsletter:</label>

      <input name="newsletter" />

</fieldset>

</form>

<input name="none" />

JQuery代码如下:

$(“form > input”)

上面代码所返回的JQuery对象为:

[ <input name="name" /> ]

而<input name="newsletter" />并没有被返回。显而易见,父子组合仅仅在子元素这一层进行搜索,并不会搜索子元素的子元素(即:子元素树),于普通组合器的区别也就在这里。

<table class="data" cellpadding="2" cellspacing="0">

<thead>

<tr>

<th>User Name</th><th>Email</th><th>MobilePhone</th>

</tr>

</thead>

<tbody>

<tr>

<td>Frank</td><td>eagle@126.com</td><td>13100006688</td>

</tr>

<tr>

<td>Jack</td><td>jack@126.com</td><td>13544446688</td>

</tr>

</tbody>

</table>

上面HTML代码定义了一个Table,现在希望通过JQuery修改Table为如下效果(图2-8):

wps_clip_image-4919

图2-8

修改表格的边框颜色为蓝色,并调整表格的宽度为600像素,可以使用类选择器获取表格元素,并使用css函数设置样式:

$(".data").css("border", "solid 1px blue").css(“width”,”600px”);

修改标题行的背景颜色为“SkyBlue”,使用父子组合找到“thead”标签,再使用普通组合找到“th”标签,并使用css函数设置样式:

$(".data>thead th").css("background-color", "SkyBlue");

修改每一数据行下边框的样式,方法同上:

$(".data>tbody td").css("border-bottom", "solid 1px SkyBlue");

完整的代码如下:

<script type="text/javascript">

jQuery(function() {

$(".data").css("border", "solid 1px blue").css("width","600px");

$(".data>thead th").css("background-color", "SkyBlue");

$(".data>tbody td").css("border-bottom", "solid 1px SkyBlue");

});

</script>

使用JQuery设置页面样式的优点在于,可以是HTML元素于CSS彻底的分离。在编写HTML(或服务器端的控件、标签)的时候,完全不需要考虑样式该如何进行设置,等得到HTML页面之后,再统一的使用JQuery进行动态调整,进而使代码有更好的扩展性。

现在再修改前面HTML代码,再添加一个格式完全一样的Table:

<table class="data" cellpadding="2" cellspacing="0">

<thead>

<tr>

<th>User Name</th><th>Email</th><th>MobilePhone</th>

</tr>

</thead>

<tbody>

<tr>

<td>Hello</td><td>Hello@126.com</td><td>13888886688</td>

</tr>

<tr>

<td>World</td><td>World@126.com</td><td>13566668866</td>

</tr>

</tbody>

</table>

运行结果如下(图2-9):

wps_clip_image-6018

图2-9

使用起来非常轻松。

 

4) prev + next

前两个组合是搜索子元素,而“prev+next”则是搜索“prev”后面的“next”元素,是前后关系。prev和next都是合法的Selector(选择器)。通过如下例子,大家可以很容易理解:

<form>

  <input name="prev" />

  <label>Name:</label>

  <input name="name" />

  <fieldset>

      <label>Newsletter:</label>

      <input name="newsletter" />

</fieldset>

</form>

<input name="none" />

JQuery代码如下:

$("label + input")

代码执行结果的JQuery对象:

[ <input name="name" />, <input name="newsletter" /> ]

而不包含HTML元素<input name="prev" />。

 

5) prev ~ siblings

在“prev”后搜索“siblings”元素,但只局限在与“prev”同一级进行搜索。我们还是使用上面的HTML代码:

<form>

  <input name="prev" />

  <label>Name:</label>

  <input name="name" />

  <fieldset>

      <label>Newsletter:</label>

      <input name="newsletter" />

</fieldset>

</form>

<input name="none" />

JQuery代码如下:

$("label ~ input")

代码执行结果的JQuery对象:

[ <input name="name" />

而不包含HTML元素<input name="newsletter" />。

转载于:https://www.cnblogs.com/netEagle/articles/1502309.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值