jQuery选择器笔记

上次笔记,我写了jQuery是什么?为什么要使用jQuery?这次笔记写一写使用jQuery选择器。jQuery想要操作HTML元素,就必须能够选中它,然后在对该元素进行想要进行的操作。

本节知识脑图:
在这里插入图片描述
一、快速入门程序

<html>
<head>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$(document).ready(function(){
  $("p").click(function(){
  $(this).hide();
  });
});
</script>
</head>
<body>
<p>单击我,我就会消失。</p>
</body>
</html>


1.$() 是 jQuery 的缩写, 它能在DOM中搜索与指定选择器匹配的元素,创建并返回一个引用该元素的jQuery对象。这里千万记住它返回的是jQuery对象,不是dom对象。记住它有什么好处呢?至少你得知道它俩的方法你不能混用吧。


2.$(document) 是 jQuery 的常用对象,代表的是 HTML 文档对象,也就是 dom 对象。它是目前为止我见过的,唯一一个不用加引号的选择器。感觉就像是把document对象转化成了jQuery对象,然后才能用jQuery对应的方法。


3.$(this) 是一个 jQuery 对象,表示引用当前的 HTML 元素。从代码就可以看出,给 p 标签加了事件, 一旦我们触发了这个事件, 那么当前的 this 对象就是指你触发事件的事件源,也就是 p 元素,在通过 $() 转换成对应的 jQuery 对象,调用 jquery 的 hide() 方法。

二、讲透 dom 对象和 jQuery 对象。

1.dom 对象转换成 jQuery 对象

var jqObj = $(domObj);


2.jQuery 对象转换成 dom 对象

var domObj = $(“p”)[0];
var domObj = $(“p”).get(0);


3.检测是 dom 对象还是 jQuery 对象

<!DOCTYPE html>
<html>
<head>
  <script src="jquery.js"></script>
</head>
<body>
<div><p>包含p元素的div元素</p></div>
  <div>不包含p元素的div元素</div>
<script>
function isDOM(obj){
	if(typeof HTMLElement==='object'){
		return obj instanceof HTMLElement;
	}else{
		return obj && typeof obj === 'object' && obj.nodeType === 1 && typeof obj.nodeName==='string';
	}
}

 $(document).ready(function(){
	$("div:has(p)").css({ background:'yellow', color:'blue' });
	var jq = $("div:has(p)").get(0);
	if(jq instanceof jQuery){
		alert("是jQuery对象");
	}
	if(isDOM(jq)){
		alert("是dom对象");
	}

  });
</script>
</body>
</html>

注意:从这几个练习,我们不难发现jQuery对象像一个数组,而且取出来的单个元素又是dom对象,所以我推测jQuery对象就是一个dom数组类型


三、jQuery的选择器(要先选择出对象才能管理和操作)

1.基础选择器
a.id选择器

<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
$(document).ready(function(){
  $("#button1").click(function(){
     alert("hello");
	 //$("#button1").css("border","3px solid red");
	 //$(this).css("border","3px solid red");
	 //$(this)[0].css("border","3px solid red");
	 $(this)[0].style.color = "red";
	 $(this)[1].style.color = "red";
  });
});
</script>
</head>
<body>
<button id="button1">单击我</button>
<button id="button1">单击我</button>
</body>
</html>

解释一下:第一个注释没有报错,是最正常的调用方式。第二个注释括号里面的内容换成了this,我在一中解释过了,也没有问题。第三个注释我想做的是用 dom 对象的方法设置 HTML 元素的属性,所以加[0]转换成了dom对象,它打点调用的是jQuery的方法,所以会报错,截图是第一张。第四个是第三个的正确调用方法调用的是dom的style属性。第五句话我想要尝试 id 不能重复命名的效果,结果是如果存在两个相同的,以第一个为准,无法通过id设置第二个按钮的任何样式。第五句话报错,因为不存在[1]

运行结果:
1

在这里插入图片描述

在这里插入图片描述

b.标签名选择器

<html>
  <body>
    <a href="http://jquery.com/">jQuery</a>
	<a href="#">jQuery</a>
    <script src="jquery.js"></script>
   <script>
     $(document).ready(function(){
       $("a").click(function(event){
         alert("Hello jQuery");
		 //这句话是重点
         event.preventDefault();
		 $("a")[0].style.color="red";
		 $("a")[1].style.color="black";
       });
     });
   </script>
  </body>
</html>

运行结果:
在这里插入图片描述

c.类别选择器

<html>
<head>
<script type="text/javascript" src="jquery.js"></script>  
  <script>
  $(document).ready(function(){
    $(".myClass").css("border","3px solid red");
	$(".myClass")[1].style.color="red";
  });
  </script>
</head>
<body>
  <div class="notMe">div class="notMe"</div>
  <div class="myClass">div class="myClass"</div>
  <span class="myClass">span class="myClass"</span>
</body>
</html>

运行结果:
在这里插入图片描述

d.选择所有

<!doctype html>
<html>
<head>
<script type="text/javascript" src="jquery.js"></script>  
  <script>
  /*
	注意dom树,head是不显示边框的从html开始走右分支 红6个
  */
  $(document).ready(function(){
    $("*").css("border","3px solid red");
  });
  </script>
  <style>
  div,span {
    width: 150px;
    height: 60px;
    float:left;
    padding: 10px;
    margin: 10px;
    background-color: #EEEEEE;
  }
  </style>
</head>
<body>
  <div>DIV</div>
  <span>SPAN</span>
  <p>P <button>Button</button></p>
</body>
</html>

运行结果:
在这里插入图片描述

e.同时选择多个

<!doctype html>
<html>
<head>
<script type="text/javascript" src="jquery.js"></script>  
  <script>
  $(document).ready(function(){
    $("div, span").css("border","3px solid red");
  });
  </script>
  <style>
  div,span {
    width: 150px;
    height: 60px;
    float:left;
    padding: 10px;
    margin: 10px;
    background-color: #EEEEEE;
  }
  </style>
</head>
<body>
 <div>DIV</div>
  <span>SPAN</span>
  <p>P <button>Button</button></p>
</body>
</html>

运行结果:
在这里插入图片描述

2.层次选择器
a.祖先 后代选择器

<!DOCTYPE HTML>
<html>
<head>
  <script src=" jquery.js"></script>
  
  <script>
  $(document).ready(function(){	
    $("form input").css("border", "2px dotted green");
  });
  </script>
  <style>
  form { border:2px red solid;}
  </style>
</head>
<body>
  <form>
  <p>被p标签<br>
用户名:    <input name="txtUserName" type="text" value="" />  <br>包裹 </p>
密码:    <input name="txtUserPass" type="password" /> <br>
  </form>
  b表单外的文本框: <input name="none" />
</body>
</html>

运行结果:
在这里插入图片描述

b.父>子选择器

<!DOCTYPE HTML>
<html>
<head>
  <script src="jquery.js"></script>  
  <script>
  $(document).ready(function(){
    $("#main > *").css("border", "3px double red");
  });
  </script>
  <style>
  body { font-size:14px; }
  span#main { display:block; background:yellow; height:110px; }
  button { display:block; float:left; margin:2px; 
           font-size:14px; }
  div { width:90px; height:90px; margin:5px; float:left;
        background:#bbf; font-weight:bold; }
  div.mini { width:30px; height:30px; background:green; }
  </style>
</head>
<body>
  <span id="main">
    <div></div>
    <button>Child</button>
    <div class="mini"></div>
    <div>
      <div class="mini"></div>
      <div class="mini"></div>
    </div>
    <div><button>Grand</button></div>
    <div><span>A Span <em>in</em> child</span></div>
    <span>A Span in main</span>
  </span>
</body>
</html>

运行结果:
在这里插入图片描述

可以看到两者的区别,祖先后代,是把它所有的后代元素,不管是儿子还是孙子都选中,而父子选择器只是选择它的儿子,要想选择孙子继续用“>”连下去

c.前+后选择器

<!DOCTYPE html>
<html>
<!--只有紧接着的才可以-->
<head>
  <script src="jquery.js"></script>
</head>
<body>
  <form>
    <label>Name:</label>
    <input name="name" />
    <fieldset>
      <label>Newsletter:</label>
      <input name="newsletter" />
    </fieldset>
  </form>
  <input name="none" />
<script>
$("label + input").css("border", "2px dotted green")
</script>
</body>
</html>

运行结果:
在这里插入图片描述

d.前~兄弟选择器

<!DOCTYPE html>
<html>
<head>
<!--没有紧挨着的也选中-->
  <style>
  div,span {
    display:block;
    width:80px;
    height:80px;
    margin:5px;
    background:#bbffaa;
    float:left;
    font-size:14px;
  }
  div#small {
    width:60px;
    height:25px;
    font-size:12px;
    background:#fab;
  }
  </style>
  <script src="jquery.js"></script>
</head>
<body>
  <div>div (doesn't match since before #prev)</div>
  <span id="prev">span#prev</span>
  <div>div sibling</div>
  <div>div sibling <div id="small">div niece</div></div>
  <span>span sibling (not div)</span>
  <div>div sibling</div>
<script>$("#prev ~ div").css("border", "3px groove blue");</script>

运行结果:
在这里插入图片描述

四、jQuery的过滤器(选择更加明确的元素)

a.基本过滤器

<!DOCTYPE html>
<html>
<head>
  <script src="jquery.js"></script>
</head>
<body>
  <table border="0">
    <tr><td>第 1 行</td><td>第 1 行</td></tr>
    <tr><td>第 2 行</td><td>第 2 行</td></tr>
    <tr><td>第 3 行</td><td>第 3 行</td></tr>
  </table>
 <script>
  $(document).ready(function(){
    $("tr:first").css("font-style", "italic");
    $("tr:last").css("font-style", "italic");
    $("tr:even").css("color", "red");
    $("tr:odd").css("color", "blue");
  });
  </script>
</body>
</html>

运行结果:
在这里插入图片描述
注:这里的even是偶数的意思,它的偶数指的是索引值为偶数。odd同样

<!DOCTYPE html>
<html>
<head>
  <script src="jquery.js"></script>
</head>
<body>
  <table border="0">
    <tr><td>第 1 行</td><td>第 1 行</td></tr>
    <tr><td>第 2 行</td><td>第 2 行</td></tr>
    <tr><td>第 3 行</td><td>第 3 行</td></tr>
  </table>
 <script>
  $(document).ready(function(){
	//等于1自然是第一行
    $("tr:eq(1)").css("font-style", "italic");
	//小于1自然是第1行
    $("tr:lt(1)").css("color", "red");
	//大于1自然是第3行
    $("tr:gt(1)").css("color", "blue");
  });
  </script>
</body>
</html>

运行结果:
在这里插入图片描述

b.内容过滤器
(1).:contains()选择包含指定文本的元素

<!DOCTYPE html>
<html>
<head>
  <script src="jquery.js"></script>
</head>
<body>
    <div>HTML4</div>
  <div>HTML5</div>
  <div>CSS3</div>
  <div>jQuery</div>
 <script>
 $(document).ready(function(){
	$("div:contains(HTML)").css({ background:'yellow', color:'blue' });
  });
  </script>
</body>
</html>

运行结果:
在这里插入图片描述

(2).:empty()选择不包含子元素且指定文本为空的元素

<!DOCTYPE html>
<html>
<head>
  <script src="jquery.js"></script>
<script>
 $(document).ready(function(){
      $("td:empty()").css("background","grey" )
  });
	</script>
</head>
<body>
<div><p>kkkk</p></div>
<div>dfsa</div>
<table id="employees" width="200" border="1">
<tr><th>ID</th><th>姓名</th><th>性别</th><th>年龄</th><th>学历</th></tr>
<tr>
				<td>001</td>
				<td>张三</td>
				<td></td>
				<td></td>
				<td>大专</td>
		</tr>
		<tr>
				<td>002</td>
				<td>李四</td>
				<td>男</td>
				<td>30</td>
				<td></td>
		</tr>
		<tr>
				<td>003</td>
				<td>王五</td>
				<td><p></p></td>
				<td>25</td>
				<td>本科</td>
		</tr>
		</table>
</body>
</html>

运行结果:
在这里插入图片描述
注:可以看到包含子元素但是文本为空的选不中,而且这个empty就应该不带参数的用。
(3).:has()匹配包含指定子元素的元素

<!DOCTYPE html>
<html>
<head>
  <script src="jquery.js"></script>
</head>
<body>
<div><p>包含p元素的div元素</p></div>
  <div>不包含p元素的div元素</div>
  <div>1</div>
<script>


 $(document).ready(function(){
	$("div:has(p)").css({ background:'yellow', color:'blue' });
	

  });
</script>
</body>
</html>

运行结果:
在这里插入图片描述
(4).:parent()与empty的作用正好相反,可以匹配至少一个子元素或者文本,可以看到两者的条件是互补的(带参数和不带参数一样)。

<!DOCTYPE html>
<html>
<head>
  <script src="jquery.js"></script>
</head>
<body>
<div><p>包含p元素的div元素</p></div>
  <div>不包含p元素的div元素</div>
  <div>1</div>
<script>


 $(document).ready(function(){
	$("div:parent()").css({ background:'yellow', color:'blue' });
	

  });
</script>
</body>
</html>

运行结果:
在这里插入图片描述

c.属性过滤器

<!DOCTYPE html>
<html>
<head>
  <script src="jquery.js"></script>
</head>
<body>
  <div>no id</div>
  <div id="id1">id1</div>

  <div id="id2">id2</div>
  <div>no id</div>
 <script>
 $(document).ready(function(){
    $('div[id]').css("border", "2px dotted green");
    $('div[id=id1]').css("border", "2px dotted red");
    });
	</script>
</body>
</html>

注:属性过滤器有很多,用到时候自己找。比如什么以指定值开头啊,以指定值结尾啊,不等于指定值等等,我感觉没必要记,但一定要知道。

d、子元素过滤器
1.:nth-child(index/even/odd/equation)

<!DOCTYPE html>
<html>
<head>
  <script src="jquery.js"></script>
  <script>
 $(function(){
    $("ul li:nth-child(even)").css("border", "2px solid red");
    });
	</script>
</head>
<body>
  <ul>
   <li>北京</li>
   <li>上海</li>
   <li>天津</li>
   <li>重庆</li>
</ul>

</body>
</html>

运行结果:
在这里插入图片描述

注:这里的even就是指偶数,不是指索引值。此处不存在索引值一说。:first-child是选择第一个子元素,相应的:last-child是选择最后一个子元素。没必要记,但一定要知道有。

参考:《jQuery程序设计教程》

猜你喜欢

转载自blog.csdn.net/weixin_42512488/article/details/85203584
今日推荐