diff --git "a/\345\276\220\351\252\217\351\271\217/20211207-JQuery\346\223\215\344\275\234DOM/1.MD" "b/\345\276\220\351\252\217\351\271\217/20211207-JQuery\346\223\215\344\275\234DOM/1.MD" new file mode 100644 index 0000000000000000000000000000000000000000..f64c51382a31be9eade566cc500d4df1a854b35f --- /dev/null +++ "b/\345\276\220\351\252\217\351\271\217/20211207-JQuery\346\223\215\344\275\234DOM/1.MD" @@ -0,0 +1,211 @@ +## 操作DOM +有了jQuery对象,不需要考虑浏览器差异了,全部统一操作 + +### 修改Text和HTML +jQuery对象的text()和html()方法分别获取节点的文本和原始HTML文本,例如,如下的HTML结构: +``` + + +``` +``` +//Jquery获取文本和HTML + +var j1 = $('[name="book"]').text(); //'Java & JavaScript' 获取节点文本 +var j2 = $('[name="book"]').html(); //'Java & JavaScript' 获取节点的原始HTML文本 连结构一起输出 +``` +``` +//无参数调用text()是获取文本,传入参数就变成设置文本,HTML也是类似操作 + +var ref1 = $('#test-ul li.js') +var ref2 = $('#test-ul li[name="book"]') + +ref1.text("我是帅哥") // 修改文本 +ref2.html('你不是') //设置HTMl + +console.log(ref1.text()); +console.log(ref2.html()); +``` + +一个jQuery对象可以包含0个或任意个DOM对象,它的方法实际上会作用在对应的每个DOM节点上。在上面的例子中试试: +``` +//一个jQuery对象可以包含0个或任意个DOM对象,它的方法实际上会作用在对应的每个DOM节点上。 + +$('#test-ul li').text('我是大帅哥') //修改所有li节点的文本 因为未指定具体的某一个li节点 将默认修改所有的li节点 + +``` +jQuery对象的另一个好处是我们可以执行一个操作,作用在对应的一组DOM节点上。即使选择器没有返回任何DOM节点,调用jQuery对象的方法仍然不会报错: +``` +// 如果不存在id为not-exist的节点: +$('#not-exist').text('Hello'); // 代码不报错,没有节点被设置为'Hello' +``` + +#### 修改css样式 +``` +var pw1 =$("p").css("background-color","red") +//获取 所有p元素 修改css("属性名","属性值") + +用到的便是JQuery提供的css方法 +获取style中某个属性的结构为:$(obj).css("属性名"); +修改属性值的结构为:$(obj).css("属性名", "属性值"); + + +$('#test-css li.dy>span').css('background-color','green').css('color','red') +//修改background背景颜色 修改字体颜色color +``` +jQuery对象的css()方法可以这么用: +``` +var div = $('#test-div'); +div.css('color'); // '#000033', 获取CSS属性 +div.css('color', '#336699'); // 设置CSS属性 +div.css('color', ''); // 清除CSS属性 + + +为了和JavaScript保持一致,CSS属性可以用'background-color'和'backgroundColor' 驼峰式两种格式。 + +``` + + +css()方法将作用于DOM节点的style属性,具有最高优先级。如果要修改class属性,可以用jQuery提供的下列方法: +``` +var div = $('#test-div'); +div.hasClass('highlight'); // false, class是否包含highlight +div.addClass('highlight'); // 添加highlight这个class +div.removeClass('highlight'); // 删除highlight这个class + +``` + +#### 练习 +``` + + + +
+ +
+'use strict'; + +var div = $('#test-highlight-css'); + +div.css('color','#dd1144').css('background-color','#ffd351') +//css()方法高亮显示 + +div.addClass('highlight') +//addClass()方法高亮显示 + +``` + + +#### 显示和隐藏DOM + +``` +jQuery提供show()和hide()方法 +var li= $('#test-highlight-css .py'); //获取节点 Python + +li.hide(); //隐藏 +li.show(); //显示 + +隐藏DOM节点并未改变DOM树的结构,它只影响DOM节点的显示。这和删除DOM节点是不同的 +``` + +#### 获取DOM信息 +``` + 利用jQuery对象的若干方法,我们直接可以获取DOM的高宽等信息,而无需针对不同浏览器编写特定代码: + +// 浏览器可视窗口大小: +$(window).width(); // 800 +$(window).height(); // 600 + +// HTML文档大小: +$(document).width(); // 800 +$(document).height(); // 3500 + +// 某个div的大小: +var div = $('#test-div'); +div.width(); // 600 +div.height(); // 300 +div.width(400); // 设置CSS属性 width: 400px,是否生效要看CSS是否有效 +div.height('200px'); // 设置CSS属性 height: 200px,是否生效要看CSS是否有效 +``` + +``` +attr()和removeAttr()方法用于操作DOM节点的属性: + +//
...
+var div = $('#test-div'); +div.attr('data'); // undefined, 属性不存在 +div.attr('name'); // 'Test' +div.attr('name', 'Hello'); // div的name属性变为'Hello' +div.removeAttr('name'); // 删除name属性 +div.attr('name'); // undefined +``` +``` +//attr('属性名','值')修改已存在的属性的值 removeAttr('属性名') 删除属性 + +
  • + +var text=$('.form input[type="text"]') //获取DOM节点 +text.attr('value','帅哥') // attr()修改text的value属性 + +``` + + +prop()方法和attr()类似,但是HTML5规定有一种属性在DOM节点中可以没有值,只有出现与不出现两种,例如: +``` + +等价于: +``` +``` + +``` +attr()和prop()对于属性checked处理有所不同: +``` +var radio = $('#test-radio'); +radio.attr('checked'); // 'checked' +radio.prop('checked'); // true +``` +prop()返回值更合理一些。不过,用is()方法判断更好: +``` +var radio = $('#test-radio'); +radio.is(':checked'); // true +类似的属性还有selected,处理时最好用is(':selected')。 +``` +#### 操作表单 +``` +对于表单元素,jQuery对象统一提供val()方法获取和设置对应的value属性: + +/* + + + +*/ +var + input = $('#test-input'), + select = $('#test-select'), + textarea = $('#test-textarea'); + +input.val(); // 'test' +input.val('abc@example.com'); // 文本框的内容已变为abc@example.com + +select.val(); // 'BJ' +select.val('SH'); // 选择框已变为Shanghai + +textarea.val(); // 'Hello' +textarea.val('Hi'); // 文本区域已更新为'Hi' +``` diff --git "a/\345\276\220\351\252\217\351\271\217/20211208-jQuery\344\272\213\344\273\266/1.MD" "b/\345\276\220\351\252\217\351\271\217/20211208-jQuery\344\272\213\344\273\266/1.MD" new file mode 100644 index 0000000000000000000000000000000000000000..67937bbcb1f00440829cef5a97a7bbeecacff003 --- /dev/null +++ "b/\345\276\220\351\252\217\351\271\217/20211208-jQuery\344\272\213\344\273\266/1.MD" @@ -0,0 +1,169 @@ +## 事件 + +因为JavaScript在浏览器中以单线程模式运行,页面加载后,一旦页面上所有的JavaScript代码被执行完后,就只能依赖触发事件来执行JavaScript代码。 + +浏览器在接收到用户的鼠标或键盘输入后,会自动在对应的DOM节点上触发相应的事件。如果该节点已经绑定了对应的JavaScript处理函数,该函数就会自动调用。 + +由于不同的浏览器绑定事件的代码都不太一样,所以用jQuery来写代码,就屏蔽了不同浏览器的差异,我们总是编写相同的代码。 + +``` +/* +点我试试 +*/ +``` +``` +on方法用来绑定一个事件,我们需要传入事件名称和对应的处理函数。 + +var a = $('#test-link'); //查找到节点 +a.on('click', function () { //用on绑定事件 on('事件名称','对应函数') + alert('Hello!'); +}); + +``` +更简化的写法是直接调用click()方法: +``` +a.click(function () { + alert('Hello!'); +}); +``` + +jQuery能够绑定的事件主要包括: + +### 鼠标事件 ++ click: 鼠标单击时触发; ++ dblclick:鼠标双击时触发; ++ mouseenter:鼠标进入时触发; ++ mouseleave:鼠标移出时触发; ++ mousemove:鼠标在DOM内部移动时触发; ++ hover:鼠标进入和退出时触发两个函数,相当于mouseenter加上mouseleave。 +### 键盘事件 +键盘事件仅作用在当前焦点的DOM上,通常是``和`