js查找和过滤
通常情况下选择器可以直接定位到我们想要的元素,但是,当我们拿到一个jQuery对象后,还可以以这个对象为基准,进行查找和过滤。
最常见的查找是在某个节点的所有子节点中查找,使用find()方法,它本身又接收一个任意的选择器。例如如下的HTML结构:
<!-- HTML结构 -->
<ul class="lang">
<li class="js dy">JavaScript</li>
<li class="dy">Python</li>
<li id="swift">Swift</li>
<li class="dy">Scheme</li>
<li name="haskell">Haskell</li>
</ul>
用find()查找:
var ul = $('ul.lang'); // 获得<ul>
var dy = ul.find('.dy'); // 获得JavaScript, Python, Scheme
var swf = ul.find('#swift'); // 获得Swift
var hsk = ul.find('[name=haskell]'); // 获得Haskell
如果要从当前节点开始向上查找,使用 parent() 方法:
 var swf = $('#swift'); // 获得Swift
 var parent = swf.parent(); // 获得Swift的上层节点<ul>
 var a = swf.parent('div.red'); // 从Swift的父节点开始向上查找,直到找到某个符合条件的节点并返回
对于位于同一层级的节点,可以通过next()和prev()方法,例如:
当我们已经拿到Swift节点后:
 var swift = $('#swift');
 swift.next(); // Scheme
 swift.next('[name=haskell]'); // Haskell,因为Haskell是后续第一个符合选择器条件的节点
 swift.prev(); // Python
 swift.prev('.js'); // JavaScript,因为JavaScript是往前第一个符合选择器条件的节点
过滤
和函数式编程的map、filter类似,jQuery对象也有类似的方法。
filter()方法可以过滤掉不符合选择器条件的节点:
 var langs = $('ul.lang li'); // 拿到JavaScript, Python, Swift, Scheme和Haskell
 var a = langs.filter('.dy'); // 拿到JavaScript, Python, Scheme
或者传入一个函数,要特别注意函数内部的this被绑定为DOM对象,不是jQuery对象:
 var langs = $('ul.lang li'); // 拿到JavaScript, Python, Swift, Scheme和Haskell
 var arr = langs.map(function () {
     return this.innerHTML;
 }).get(); // 用get()拿到包含string的Array:['JavaScript', 'Python', 'Swift', 'Scheme', 'Haskell']
map()方法把一个jQuery对象包含的若干DOM节点转化为其他对象:
 var langs = $('ul.lang li'); // 拿到JavaScript, Python, Swift, Scheme和Haskell
 var arr = langs.map(function () {
     return this.innerHTML;
 }).get(); // 用get()拿到包含string的Array:['JavaScript', 'Python', 'Swift', 'Scheme', 'Haskell']
此外,一个jQuery对象如果包含了不止一个DOM节点,first()、last()和slice()方法可以返回一个新的jQuery对象,把不需要的DOM节点去掉:
 var langs = $('ul.lang li'); // 拿到JavaScript, Python, Swift, Scheme和Haskell
 var js = langs.first(); // JavaScript,相当于$('ul.lang li:first-child')
 var haskell = langs.last(); // Haskell, 相当于$('ul.lang li:last-child')
 var sub = langs.slice(2, 4); // Swift, Scheme, 参数和数组的slice()方法一致
练习
对于下面的表单:
<form id="test-form" action="#0" onsubmit="return false;">
<p><label>Name: <input name="name"></label></p>
<p><label>Email: <input name="email"></label></p>
<p><label>Password: <input name="password" type="password"></label></p>
<p>Gender: <label><input name="gender" type="radio" value="m" checked> Male</label> <label><input name="gender" type="radio" value="f"> Female</label></p>
<p><label>City: <select name="city">
<option value="BJ" selected>Beijing</option>
<option value="SH">Shanghai</option>
<option value="CD">Chengdu</option>
<option value="XM">Xiamen</option>
</select></label></p>
<p><button type="submit">Submit</button></p>
</form>
输入值后,用jQuery获取表单的JSON字符串,key和value分别对应每个输入的name和相应的value,例如:{"name":"Michael","email":...}
'use strict';
var json = null;
----
json = ???;
----
// 显示结果:
if (typeof(json) === 'string') {
alert(json);
}
else {
alert('json变量不是string!');
}
js查找和过滤的更多相关文章
- 06jQuery-03-选择器查找和过滤
		
1.查找 find().parent().prev().next() 通常情况下选择器可以直接定位到我们想要的元素,但是,当我们拿到一个jQuery对象后,还可以以这个对象为基准,进行查找和过滤. 最 ...
 - jQuery 查找和过滤
		
通常情况下选择器可以直接定位到我们想要的元素,但是,当我们拿到一个jQuery对象后,还可以以这个对象为基准,进行查找和过滤. 最常见的查找是在某个节点的所有子节点中查找,使用find()方法,它本身 ...
 - JS查找字符串中出现次数最多的字符
		
本文给大家带来两种js中查找字符串中出现次数最多的字符,在这两种方法中小编推荐使用第二种,对js查找字符串出现次数的相关知识感兴趣的朋友一起看看吧 在一个字符串中,如 'zhaochucichuz ...
 - js查找字符串、js截取
		
js查找元素.js查找字符串 let index=data.indexOf(","); js截取.js截取字符串 $("#bankurl_id").val(da ...
 - JS查找孩子节点
		
以前看了JS方面的书,如今用到了,书看得再多,不用就忘了,所以经常用用你所学到的知识,温故知新. <!DOCTYPE html> <html> <head> < ...
 - js 查找数组中某个字符出现的次数
		
1. js 查找数组中某个字符出现的次数 代码示例 let arr = ['asd', 'green', 'yeadt', 'red', 'wati', 'red', 'red'] let index ...
 - JS - 查找同辈中的对象
		
今天在使用parent().find(".a:first")的时候,发现查找结果非正常按照顺序来的.有点递归的感觉,从底层往上. 因为需要的是同级的对象,所以去查了一下jquery ...
 - 原生JS查找元素
		
今天写了一个很简单.很粗暴的通过JS根据类来查找DOM元素. 为了降低它的粗暴等级(耗费性能)我给了三个等级. 首先性能最好的,适合FF,CH,IE8,通过querySelectorAll这个API. ...
 - JS查找和替换字符串列子
		
依赖 工具函数库 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...
 
随机推荐
- PHP 字符串替换 substr_replace 与 str_replace 函数
			
PHP 字符串替换 用于从字符串中替换指定字符串. 相关函数如下: substr_replace():把字符串的一部分替换为另一个字符串 str_replace():使用一个字符串替换字符串中的另一些 ...
 - java 集合专练
			
handsomecui的blog地址为:http://www.cnblogs.com/handsomecui/ 本人网站为:handsomecui.top 引言:本次主要练习单列集合:Collecti ...
 - 高仿拉手网底部菜单实现FragmentActivity+Fragment+RadioGroup
			
先把欢迎页和引导页的代码上传了http://download.csdn.net/detail/u013134391/7183787不要积分的. 底部菜单条实如今4.0曾经都是用tabhost.如今基本 ...
 - ZooKeeper的学习与应用
			
近期大概学习了一下ZooKeeper,本身并没有深入.LGG尝试着在虚拟机里面搭了平台,看了看一些教材,从网上到处看别人的博文并引用之,还请各位大牛们谅解我的剽窃.现总结例如以下. 1. ZooKee ...
 - Oracle-nomount/mount/open
			
通常所说的Oracle Server主要由两个部分组成:Instance和Database.Instance是指一组后台进程(在Windows上是一组线程)和一块共享内存区域:Database是指存储 ...
 - .NET基础拾遗(1)类型语法基础和内存管理基础1
			
一.基础类型和语法 1.1 .NET中所有类型的基类是什么? 在.NET中所有的内建类型都继承自System.Object类型. 1.2 值类型和引用类型的区别? 在.NET中的类型分为值类型和引用类 ...
 - 【问题备注】VS2012不能输入代码,文字…
			
第一次遇到,非常奇怪,一个项目,VS2012能正常打开,但是不能输入代码. 对比分析发现,其他项目能正常work.在于一个问题就是,VS2012 右下角有个INS一直在转一直analyzing,而正常 ...
 - Canvas绘图方法和图像处理方法(转)
			
转自:http://javascript.ruanyifeng.com/htmlapi/canvas.html 概述 Canvas API(画布)用于在网页实时生成图像,并且可以操作图像内容,基本上它 ...
 - oracle 初探内存结构
			
数据库的存储机构 分为 逻辑存储结构 和 物理存储结构 逻辑存储结构: 数据库.表空间.段.区.块 物理存储结构: 数据库.控制文件.数据文件.初始化参数文件.OS块等. 一个区只能在 ...
 - Oracle相关的知识点
			
1. 如何在Oracle SQLPlus中执行SQL Script文件 以下面的格式在提示符中输入@{file name} SQL>@{file} 假设你要运行的文件的名字是script.sql ...