博客列表 >JS基础-jQuery中的getter/setter操作方法/jQuery中的DOM操作/jQuery常用过滤器

JS基础-jQuery中的getter/setter操作方法/jQuery中的DOM操作/jQuery常用过滤器

岂几岂几
岂几岂几原创
2020年06月06日 13:42:22788浏览

jQuery基本的getter/setter操作

    1. attr()方法: 获取/设置元素属性值.
    • 1.1 jQuery对象.attr(参数名): 获取参数值, 入参为参数名;
    • 1.2 jQuery对象.attr(参数名, 参数值): 设置参数值, 入参1是参数名, 入参2是参数值;
    • 1.3 入参为只有属性的js对象: 同时设置多个属性值.
      1. jQuery对象.attr({
      2. prop1: val1,
      3. prop2: val2,
      4. ...
      5. });
    • 1.4 jQuery对象.attr(参数名, 回调函数): 把回调函数的返回值设置为参数的值, 即, 动态为属性设置值.
    1. css()方法: 获取获取元素的最终样式(即, 计算样式); 设置元素的css样式.
    • css()的使用方法跟attr()类似, 如: jQuery对象.css(css属性名), jQuery对象.css(css属性名, 属性值), jQuery对象.css(字面量js对象), jQuery对象.css(css属性名, 回调函数). 相关解释见attr().
    1. val(): 获取/设置jQuery对象封装的元素的值(value属性值).
    • jQuery对象.val(): 获取value属性值;
    • jQuery对象.val(值): 设置value属性值;
    • jQuery对象.val(回调函数): 动态设置value属性值.
    1. html()/text(): 元素内容获取/设置操作
    • html()方法跟JS原生的element.innerHTML对应, 浏览器会解析他们的值中的HTML标签, 再输出;
    • text()方法跟JS原生的element.innerText对应, 浏览器会原样输出他们的值;
    1. data()/removeData(): 获取,设置/移除自定义属性.
  • tips: 所有setter操作, 参数都可以试试: 普通参数值, 字面量对象, 回调函数赋值

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>基本的getter/setter操作-1</title>
  7. <!-- CDN方式引用, 即内容分发方式 -->
  8. <!-- BootCDN或者又拍云的CDN的速度都可以 -->
  9. <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js"></script>
  10. <!-- 本地引用 -->
  11. </head>
  12. <body>
  13. <h3>登录</h3>
  14. <form action="hello.php" method="POST">
  15. <div class="item-box">
  16. <label for="username">姓名:</label>
  17. <input type="text" name="username" id="username">
  18. </div>
  19. <div class="item-box">
  20. <label for="username">邮箱:</label>
  21. <input type="email" name="email" id="email" value="grantkai@qq.com">
  22. </div>
  23. <div class="item-box">
  24. <label for="remember_0">记住我:</label>
  25. <input type="radio" name="remember" id="remember_0" checked><label for="remember_0">保存</label>
  26. <input type="radio" name="remember" id="remember_1"><label for="remember_1">放弃</label>
  27. </div>
  28. </form>
  29. </body>
  30. <script>
  31. var cl = console.log.bind(console);
  32. // 获取表单元素
  33. var form = $('form');
  34. cl(form);
  35. // 1. attr()方法: 获取/设置元素属性值
  36. /* 1.1 只有一个入参, 为读取, 入参为属性名 */
  37. /* 获取form元素的action属性的值 */
  38. cl(form.attr('action'));
  39. /* 1.2 两个入参, 为设置, 入参1位属性名, 入参2位属性值 */
  40. form.attr('action', 'hi.php');
  41. cl(form.attr('action'));
  42. /* 1.3 修改多个属性值, 入参一个js对象, 对象中的属性是要被修改的属性 */
  43. form.attr({
  44. action: 'sayHello.php',
  45. method: 'GET'
  46. });
  47. /* 1.4. 入参2也可以是回调函数 */
  48. form.attr('action', function() {
  49. // 获取当前请求方式, 如果是GET请求, 则执行查询脚本'query.php'; 如果是非GET请求, 则执行注册脚本:`register.PHP`
  50. // 获取当前表单的method属性值, 并转为小写
  51. var method = $(this).attr('method').toLowerCase();
  52. if('get' == method) {
  53. return 'query.php';
  54. } else {
  55. return 'register.php';
  56. }
  57. });
  58. // 2. css()方法: 针对HTML元素的style属性进行操作. 而它不止能获取到style属性的值, 还能获取到该元素所有的样式
  59. // 包括: 元素的style属性指定的样式(又叫内联样式)/元素默认样式/HTML文件中<style>标签定义的样式/外部css文件定义的样式...
  60. /* tips: 获取元素的最终样式(即, 计算样式) */
  61. /* 使用js原生方式获取 */
  62. // cl(window.getComputedStyle(document.forms.item(0).width));
  63. /* 使用jq获取 */
  64. cl(form.css('width'));
  65. cl(form.css('border'));
  66. // 设置样式
  67. form.css('border', '5px solid green');
  68. /* 支持字面量对象入参设置多个样式属性 */
  69. form.css({
  70. backgroundColor: "wheat",
  71. border: "5px dashed blue"
  72. });
  73. /* 也支持回调 */
  74. /* 每执行一次, 背景色随机发生变化 */
  75. form.css('background-color', function() {
  76. // 颜色数组
  77. var bgcolor = ['orange', 'orangered', 'tan', 'lime'];
  78. // 使用Math.random()生成0-1的随机数, 乘以4后, 就能生成0-4之间的随机数, 然后在用Math.floor()向下取整
  79. var index = Math.floor(Math.random() * bgcolor.length);
  80. return bgcolor[index];
  81. });
  82. // 3. val(): 获取/设置表单元素的值(value属性值)
  83. /* 获取 */
  84. cl($('#email').val());
  85. /* 设置 */
  86. cl($('#email').val('grantkai@qq.com'));
  87. /* 获取选中radio的值 */
  88. cl($('input:radio[name=remember]:checked').val());
  89. /* 回调 */
  90. cl($('#email').val(function() {
  91. return this.defaultValue;
  92. }));
  93. // 4. html()/text(): 元素内容操作
  94. /* 原生方法 */
  95. document.querySelector('h3').innerText = '请登录';
  96. /* jq */
  97. $('h3').text('请登录1');
  98. // js中的innerText属性对应jq中的text()方法, 浏览器会原样输出他们的值
  99. // jq中的innerHTML属性对应jq中的html()方法, 浏览器会解析他们的值中的HTML标签, 再输出
  100. $('h3').text('<span style="color: green">变绿</span>');
  101. // $('h3').html('<span style="color: green">变绿</span>');
  102. // 自定义数据属性
  103. /* 增加data-desc自定义属性, 并把其值设置为'login-form' */
  104. // 貌似并没有在开发这种局的"元素"页签中显示出来, 但是是可以获取到的, 也就是说是设置成功了的
  105. $(form).data('desc', 'login-form');
  106. /* 获取自定义数据属性的值 */
  107. cl($(form).data('desc'));
  108. /* 移除 */
  109. cl($(form).removeData('desc'))
  110. /* 此时再获取data-desc自定义数据熟悉的值, 就获取不到了(undefined) */
  111. cl($(form).data('desc'));
  112. </script>
  113. </html>

jQuery中的DOM操作

  • 创建和插入元素
    • $(元素标签文本): 根据传入的标签文本, 创建对应的元素, 可带有属性.
    • $(元素标签文本, 元素属性字面量对象): 可以把元素的属性以字面量对象的形式传入第二个参数, 创建的元素将设置有这些属性.
  • 插入元素
    • 父元素.append(子元素): 在父级元素上调用, 向里面插入元素. 参数可以是HTML元素的js对象, 封装HTML元素的jQuery对象和元素标签文本. 如果是是元素标签文本, 则先创建对应的元素, 再插入到父元素中.
    • 子元素.appendTo(父元素): 在子元素上调用, 把子元素添加到父元素中. 若父元素参数为选择器文本, 则以选择器文本查询到匹配的元素作为父元素.
    • 父元素.append(回调函数): 将在父元素中插入回调函数返回的元素.
    • 插入方式
      • 兄弟元素.before(新元素): 在某个兄弟元素前插入;
      • 新元素.insertAfter(兄弟元素): 在某个兄弟元素后插入;
      • 新元素.prependTo(父元素): 新元素将作为父元素中的第一个子元素插入.
  • 元素替换

    • 当前元素.replaceWith(新元素): 用新元素替换当前元素;
    • 新元素.replaceAll(被替换的元素): 用新元素替换指定元素;
  • tips: 所有函数的参数, 都可以试试这几种值: HTML片段文本, js对象, jQuery对象, 回调函数.

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>jQuery中的DOM操作</title>
  7. <!-- CDN方式引用, 即内容分发方式 -->
  8. <!-- BootCDN或者又拍云的CDN的速度都可以 -->
  9. <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js"></script>
  10. <!-- 本地引用 -->
  11. <style>
  12. .active {
  13. color: red;
  14. }
  15. </style>
  16. </head>
  17. <body>
  18. </body>
  19. <script>
  20. var cl = console.log.bind(console);
  21. // 1. 元素的插入与替换
  22. // 1.1 append(元素字符串): 在父级元素上调用, 向里面插入元素
  23. $('body').append('<ol>');
  24. // $('body').append('<ol>');
  25. // 1.2 子元素.appendTo(父元素): 把子元素添加到父元素中, appendTo()是在子元素上调用
  26. $('<li>').text('笔记本电脑').appendTo('ol');
  27. $('<li>').text('智能手机').addClass('active').appendTo('ol');
  28. $('<li>').html('<a href="">格子衫</a>').addClass('active').appendTo('ol');
  29. $('<li>', {
  30. id: 'hello',
  31. style: 'background-color: yellow'
  32. }).html('<a href="">游戏机</a>').appendTo('ol');
  33. /* append(回调) */
  34. /* 用回调循环生成子元素 */
  35. $('ol').append(function() {
  36. var res = '';
  37. for(var i = 0; i < 5; i++) {
  38. res += '<li><a href="">最新商品' + (i + 1) + '</a></li>';
  39. }
  40. return res;
  41. });
  42. // 从第3个元素前面增加一个<li>
  43. /* befor(): 在当前元素前添加兄弟元素 */
  44. $('ol li:nth-of-type(3)').before("<li>新元素</li>");
  45. /* 把新元素2的<li>添加到第4哥<li>后面 */
  46. $('<li>新元素2</li>').insertAfter($('ol li:nth-of-type(4)'));
  47. // prepend()/prependTo(): 把新元素插入到父容器中的第一个位置
  48. $('<li>最新留言</li>').prependTo('ol')
  49. // 元素替换
  50. // 当前元素.replaceWith(新元素); 新元素.replaceAll(当前元素)
  51. $('ol > li:last-of-type').replaceWith('<li>商品元素五</li>');
  52. // ↑↓表达式效果一样
  53. $('<li>商品元素五</li>').replaceAll('ol > li:last-of-type');
  54. </script>
  55. </html>

jQuery常用的过滤器

过滤器并不是必须的, 可以用复杂的选择器来实现”相对简单的选择器+过滤器”的效果. 但”选择器+过滤器”可读性好, 先选择, 再过滤. 过滤器的返回结果也是jQuery对象.

  • 在选择器查询到的元素中过滤
    • filter(selector): 在选择器查询结果中再次筛选过滤.
    • first(): 返回选择器查询结果的第一个元素.
    • last(): 返回选择器查询结果的最后一个元素.
    • eq(index): 返回选择器查询结果中指定索引的元素.
    • slice(start, end + 1): 返回选择器查询结果中元素索引从start到end的元素
  • 在选择器查询到的元素的子元素/后代元素中过滤
    • children(): 返回选择器查询结果的所有子元素. 等效于js中的children属性. 但children()可以返回多个元素的子元素, 而children属性只能返回当前元素的子元素.
    • find(selector): 在选择器查询结果的后代元素中再次筛选过滤.
  • 可以链式调用多个过滤器.
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>jQuery常用的过滤器</title>
  7. <!-- CDN方式引用, 即内容分发方式 -->
  8. <!-- BootCDN或者又拍云的CDN的速度都可以 -->
  9. <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js"></script>
  10. <!-- 本地引用 -->
  11. </head>
  12. <body>
  13. <ul id="first">
  14. <li>item1</li>
  15. <li>item2</li>
  16. <ul>
  17. <li class="red">item1</li>
  18. <li>item2</li>
  19. <li>item3</li>
  20. </ul>
  21. <li>item3</li>
  22. <li>item4</li>
  23. <li>item5</li>
  24. </ul>
  25. <ul id="second">
  26. <li>item1</li>
  27. <li>item2</li>
  28. <li>item3</li>
  29. <li>item4</li>
  30. <li>item5</li>
  31. </ul>
  32. </body>
  33. <script>
  34. var cl = console.log.bind(console);
  35. // 获取第一个ul
  36. /* 方式1: 用选择器 */
  37. cl($('ul#first'));
  38. /* 方式2: 用选择器+过滤器 */
  39. /* 1. filter()过滤器 */
  40. cl($('ul').filter('#first'));
  41. /* ↑第二种方法, 可读性更好, 先选择, 再过滤, 实现起来也更简单 */
  42. // cl($('ul').first());
  43. // 2. children(), 等效于js中的children属性
  44. /* 第一个ul */
  45. var ul1 = $('ul').filter('#first');
  46. cl(ul1.children());
  47. /* 第一个ul的所有子元素 */
  48. var children = ul1.children();
  49. /* 3. first(): 获取第一个元素;
  50. 4. last(): 获取最后一个元素 */
  51. children.first().css('background-color', 'red');
  52. children.last().css('background-color', 'red');
  53. /* 5. eq(index): 第(index+1)个元素 */
  54. children.eq(3).css('background-color', 'yellow');
  55. // children(选择器)只能获取到子元素, 不能获取到更深层级的元素
  56. /* 所有下面的操作, 并不能找到class="red"的元素 */
  57. ul1.children('.red').css('color', 'red');
  58. // 6. 要获取到所有后代元素, 则用find(选择器)
  59. ul1.find('li').filter('.red').css('color', 'red');
  60. // 7. slice(start, end+1)过滤范围: 过滤出索引从start到end的元素
  61. $('ul').filter('#second').children().slice(1, 3).css('color', 'orange');
  62. // 如果选择器学得好, 也可以用选择器直接实现, 过滤器并不是必须的. 但是...可读性是不是很差...
  63. $('ul#second>li:nth-of-type(-n + 3):not(:first-of-type)').css('color', 'green');
  64. </script>
  65. </html>

学习心得

  • jQuery各种getter/setter操作方法, 参数都可以试试: 普通值参数, 字面量对象参数, 回调函数作为参数;
  • jQuery的DOM操作很方便, 感觉比JS原生的DOM操作更灵活.
    -过滤器并不是必须的, 可以用复杂的选择器来实现”选择器+过滤器”的效果. 但”选择器+过滤器”可读性好.
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议