jQuery 实战读书笔记之第四章:使用特性、属性和数据
使用属性
/*
每个元素都有一或多个特性,,这些特性的用途是给出相应元素或其内容的附加信息。(出自 JavaScript 高级程序设计)
*/
/*
特性是固有的 JavaScript 对象
属性指的是在标记中指定的 DOM 元素值
属性值的类型始终是字符串
*/
/*
如果属性存在相应的 DOM 的内置特性值,那么对象特性被同步
如果属性作为一个内建属性存在并且是一个布尔值,那么该值不会被同步
*/
var checkbox = document.getElementById('checkbox-1'); //属性在没有初始值的情况下为 null
console.log('The value of attribute of title: ' + checkbox.getAttribute('title'));
//特性在没有初始值的情况下为空
console.log('The value of property of title: ' + checkbox.title); console.log(checkbox.getAttribute('title') === checkbox.title); checkbox.title = 'New title!';
console.log(checkbox.getAttribute('title') === checkbox.title); checkbox.setAttribute('title', 'Another title!');
console.log(checkbox.getAttribute('title') === checkbox.title); /*
属性如果没有显式设置就是 null,而属性则根据类型有默认值
*/
console.log('The value of attribute of checked: ' + checkbox.getAttribute('checked'));
console.log('The value of property of checked: ' + checkbox.checked);
console.log(checkbox.getAttribute('checked') === checkbox.checked); /*
对属性支持的检测
*/
if('required' in document.createElement('input')){
console.log('The property of required is supported!')
}else{
console.log('The property of required is not supported!')
} /*
attr(name)
获取第一个匹配元素的属性值,属性名称大小写不敏感(JavaScript 本身是区分大小写的)
如果没有匹配元素或没有值,返回 undefined
*/
var attrValue = $('#li1').attr('data-level');
console.log('id 为 li1 的 li 元素的 data-level 属性值为 ' + attrValue); /*
如果属性不存在,返回的是 undefined
*/
var liName = $('#li1').attr('name');
console.log('id 为 li1 的 li 元素的 name 属性值为 ' + liName); /*
attr(name, value)
value(String|Number|Boolean|Function):除非设置的是函数,否则都会转换为字符串;函数的话,每个元素都会调用函数,传递的参数为
元素的索引和当前命名属性的值
返回 jQuery 集合
*/
var $titles = $('[title]').attr('title', function(index, previousValue){
return previousValue + ' I am element ' + index +
' and my name is ' + (this.id || 'unset');
});
console.log($titles); /*
attr(attributes)
一次指定多个属性值
*/
var $inputs = $('input:not(:submit)').attr({
value: '',
title: 'Please enter a value'
});
console.log('设置属性后的 input:');
console.log($inputs); /*
removeAttr(name)
删除属性
name(String):要删除的属性名称或者名称的集合,用空格分割
删除属性并不会删除 DOM 元素对应的特性
方法内部使用了 JS 的 removeAttribute()
返回的还是 jQuery 集合
*/
var $imgAfterDelAttr = $('img').removeAttr('title alt');
console.log('删除 title 和 alt 属性后的 img 集合: ');
console.log($imgAfterDelAttr); /*
可以使用 attr() 方法处理特性,也可以使用 prop() 方法
*/ /*
prop(name)
获取匹配集合中第一个元素给定的特性值
name(String)
如果没有匹配元素或没有值,返回 undefined
*/
console.log('id 为 checkbox-3 的 checkbox 的 checked 特性值:' + $('#checkbox-3').prop('checked')); /*
prop(name, value)
为集合的所有元素设置给定命名的特性和值
name(String)
value(Any|Function),如果是函数,传递的参数是集合中元素的索引及命名的属性的当前值
*/
$('input:checkbox').prop('checked', function(index, attrValue){
if(index % 2 == 0){
console.log(attrValue);
//attrValue = true; //这样设置了没有起作用
$(this).prop('checked', true);
}
}); /*
prop(properties)
properties(Object)
*/
$(':submit').prop({
disabled: true,
class: 'red-border'
}); /*
removeProp(name)
删除集合中每个元素的特性
name(String):不支持以空格分割的名称列表
这个方法不应该用来删除原生特性,比如 required 和 checked,删除后无法再次添加
*/
$('#checkbox-4').removeProp('checked').prop('checked', true); //啥情况??? /*
data(name, value)
为集合中的所有元素添加传递的数据
name(String)
value(Any):除了 undefined
可以保存数据的类型
*/
$('#li4').data('last-value', 10);
console.log(typeof $('#li4').attr('lastValue')); //undefined???说好的 String 呢? last-value 转换为 lastValue 是 jQuery3 修改的
console.log(typeof $('#li4').data('last-value')); /*
对自定义属性 data-technologies 的两种读法
*/
console.log($('#li4').attr('data-technologies'));
console.log($('#li4').data('technologies')); /*
data(Object)
略
*/ /*
jQuery.data() 等价的低级方法 $.data()
*/
$.data(document.getElementById('li3'), 'price', 55);
$('#li2').data('price', 55); /*
data([name])
使用指定的名字查询存储的数据或 HTML5 data-* 属性,如果没有指定名字,返回所有存储的数据
name(String)
如果没有匹配元素或没有值,返回 undefined
*/
console.log($('#li2').data('price'));
console.log($('#li4').data()); //只取了 data-* 开头的数据和用 data(name, value) 设定的数据 /*
jQuery 有一个存储区,是存储 jQuery 内部使用的存储数据的区域
data() 方法会先查找内存中的数据,找不到才会用指定的名字去查找 HTML 元素的 data-* 属性,如果找到了那么就会把
值存放到内存中,所以之后用 attr() 对该属性做修改再用 data() 取还是内存中的数据
*/
console.log($('#level').data('custom'));
console.log($('#level').attr('data-custom'));
$('#level').data('custom', 'new value');
console.log($('#level').data('custom'));
console.log($('#level').attr('data-custom')); //这里读到的还是老的“foo”,上面的语句修改的是内存中的吗??? /*
removeData([name]) == $.removeData(element[, name])
name(String|Array) 要删除的数据的数据名,包括名字或以空格分割的名字,也可以是数组;如果没有参数,删除所有数据
*/
$('#li3').removeData('custom', 'technologies');
$('#li3').removeData('custom technologies'); /*
jQuery.hasData(element)
*/
console.log('id 为 li4 的元素是否包含自定义数据:' + $.hasData(document.getElementById('li4')));
jQuery 实战读书笔记之第四章:使用特性、属性和数据的更多相关文章
- jQuery 实战读书笔记之第六章:事件本质
理解浏览器事件模型 understandEventModel.html 代码: <!DOCTYPE HTML> <html> <head> <title> ...
- jQuery 实战读书笔记之第五章:使用 jQuery 操作页面
html 如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> &l ...
- jQuery 实战读书笔记之第三章:操作 jQuery 集合
创建新 HTML 元素 $('<div>Hello</div>'); /* 创建等价的空 div 元素 */ $('<div>'); $('<div /> ...
- 05 技术内幕 T-SQL 查询读书笔记(第四章)
第四章 子查询:在外部查询内嵌套的内部查询(按照期望值的数量分为,标量子查询 scalar subqueries,多值子查询multivalued subqueries)(按照子查询对外部查询的依赖性 ...
- Linux内核分析 读书笔记 (第四章)
第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间.进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统.只有通过调度程序的合理调度,系统资源才能最大限 ...
- 《深入理解java虚拟机》读书笔记三——第四章
第四章 虚拟机性能监控与故障处理工具 1.JDK命令行工具 jps命令: 作用:列出正在运行的虚拟机进程. 格式:jps [option] [hostid] 选项:-q 只输出LVMID(Local ...
- jQuery 实战读书笔记之第二章:选择元素
基本选择器 html 代码如下,后面的 js 使用的 html 基本大同小异. <!doctype html> <html> <head> <title> ...
- 《机器学习实战》学习笔记第十四章 —— 利用SVD简化数据
相关博客: 吴恩达机器学习笔记(八) —— 降维与主成分分析法(PCA) <机器学习实战>学习笔记第十三章 —— 利用PCA来简化数据 奇异值分解(SVD)原理与在降维中的应用 机器学习( ...
- C primer plus 读书笔记第十四章
这一章主要介绍C语言的结构和其他数据形式,是学习算法和数据结构的重点. 1.示例代码 /*book.c -- 仅包含一本书的图书目录*/ #include <stdio.h> #defin ...
随机推荐
- java 实现poi方式读取word文件内容
1.下载poi的jar包 下载地址:https://www.apache.org/dyn/closer.lua/poi/release/bin/poi-bin-3.17-20170915.tar.gz ...
- MVVM和MVC的区别,以及MVVM的缺点
MVVM和MVC的区别 MVC和MVVM的区别其实并不大.都是一种设计思想. 主要就是MVC中Controller演变成MVVM中的viewModel. MVVM主要解决了MVC中大量的DOM操作使页 ...
- 约瑟夫环形链表问题、丢手帕问题、剑指offer圆圈中最后一个数问题
public class Solution { // 左神解法,本题本质还是报数为m-1的倍数的人死.求最后一个活着的人是初始时候的哪个人 /* 报数(A) 实际人员编号(B) ...
- 转:用十条命令在一分钟内检查Linux服务器性能
转自:http://www.infoq.com/cn/news/2015/12/linux-performance?utm_campaign=rightbar_v2&utm_source=in ...
- [React] Detect user activity with a custom useIdle React Hook
If the user hasn't used your application for a few minutes, you may want to log them out of the appl ...
- [Tools] Unlock TypeScript's Features in Vanilla JS with @ts-check and JSDoc
TypeScript can help you with your plain JavaScript files if you add a simple //@ts-check comment. Th ...
- 机器学习基石第一讲:the learning problem
博客已经迁移至Marcovaldo's blog (http://marcovaldong.github.io/) Andrew Ng的Machine Learning比較简单,已经看完.林田轩的机器 ...
- android wifi调试(无线调试) 一步到位
没有数据线时候,怎么进行调试开发?只要在一个局域网内,最好选择wifi调试! 网上有很多这样的教程,但是有很多步.很繁琐.最近我在gp上下载了一个软件可以实现点击一步就可以了.不需要在手机上输入任何命 ...
- JavaWeb 获取ip地址
JavaWeb 获取ip地址 CreateTime--2018年5月31日17点56分 Author:Marydon import java.net.InetAddress; import jav ...
- Linux 修改终端显示bash-1.4$
先取得root权限,然后在终端如下操作[root@host]$su -然后输入密码接着[root@host]#PS1='[\u@\H \W]\$' 你取得root权限后在,在终端命令下输入这个,一定要 ...