• JS-项目实战-删除库存记录


    1、fruit.js

    1. function $(name) {
    2. if (name) {
    3. //假设name是 #fruit_tbl
    4. if (name.startsWith("#")) {
    5. name = name.substring(1); //fruit_tbl
    6. return document.getElementById(name);
    7. }
    8. }
    9. }
    10. //当页面加载完成后执行后面的匿名函数
    11. window.onload = function () {
    12. //get:获取 Element:元素 By:通过...方式
    13. //getElementById()根据id值获
    14. let fruitTbl = $("#fruit_tbl");
    15. //table.rows:获取这个表格的所有的行,返回数组
    16. let rows = fruitTbl.rows;
    17. //从 1 开始,因为 第 0 行是表头,不需要绑定事件
    18. for (let i = 1; i < rows.length-1; i++) {
    19. let tr = rows[i];
    20. //事件动态绑定
    21. tr.onmouseover = showBGColor;
    22. tr.onmouseout = clearBGColor;
    23. //cell:单元格、细胞
    24. //获取这一行的所有的单元格
    25. let tds = tr.cells;
    26. let priceTD = tds[2];
    27. //绑定鼠标悬浮事件
    28. priceTD.onmouseover = showHand;
    29. //绑定点击事件
    30. priceTD.onclick=editPrice
    31. //给删除小图标绑定鼠标悬浮和点击事件
    32. let delImgTd = tds[5];
    33. let delImg = delImgTd.firstChild;
    34. delImg.onmouseover = showHand;
    35. delImg.onclick = delFruit;
    36. }
    37. zj();
    38. };
    39. delFruit = function () {
    40. if (window.confirm("是否删除?")) {
    41. let fruitTbl = $("#fruit_tbl");
    42. let delImg = event.srcElement;
    43. if (delImg && delImg.tagName == "IMG") {
    44. let tr = delImg.parentElement.parentElement;
    45. //tr.rowIndex获取当前tr这一行的行索引
    46. let rowIndex = tr.rowIndex;
    47. //table对象有一个方法:deleteRow,能够删除指定索引位置的行
    48. fruitTbl.deleteRow(rowIndex);
    49. //重新计算总计
    50. zj();
    51. }
    52. }
    53. };
    54. editPrice = function () {
    55. let priceTD = event.srcElement;
    56. //inner:在...内部
    57. let oldPrice = priceTD.innerText;
    58. //innerHTML:在节点内部填充一段HTML代码
    59. //priceTD.innerHTML = "";
    60. priceTD.innerHTML = "";
    61. /**
    62. *
    63. * first:第一个 child:孩子
    64. * firstChild:第一个子节点
    65. * @type {ActiveX.IXMLDOMNode | ChildNode | (() => (Node | null))}
    66. */
    67. let priceInput = priceTD.firstChild;
    68. priceInput.value = oldPrice;
    69. priceInput.select();
    70. //绑定失去焦点事件
    71. priceInput.onblur = updatePrice;
    72. //输入框绑定键盘摁下事件,用于判断摁下的值是否合法
    73. priceInput.onkeydown = ckInput;
    74. };
    75. ckInput = function () {
    76. // 0-9:48-57 backspace:8 enter:13
    77. let kc = event.keyCode;
    78. if (!((kc >= 48 && kc <= 57) || kc == 8 || kc == 13)) {
    79. //取消事件
    80. event.returnValue = false;
    81. }
    82. if (kc == 13) {
    83. event.srcElement.blur();
    84. }
    85. };
    86. updatePrice = function () {
    87. let priceInput = event.srcElement;
    88. let newPrice = priceInput.value;
    89. let priceTD = priceInput.parentElement;
    90. priceTD.innerText = newPrice;
    91. xj(priceTD.parentElement)
    92. };
    93. xj = function (tr) {
    94. if (tr && tr.tagName == "TR") {
    95. let tds = tr.cells;
    96. let priceTD = tds[2];
    97. let fcountTD = tds[3];
    98. let xjTD = tds[4];
    99. let price = parseInt(priceTD.innerText);
    100. let fcount = parseInt(fcountTD.innerText);
    101. let xj = price*fcount;
    102. xjTD.innerText = xj;
    103. //同时更新总计
    104. zj();
    105. }
    106. };
    107. zj = function () {
    108. let fruitTbl = $("#fruit_tbl");
    109. let rows = fruitTbl.rows;
    110. let total = 0;
    111. for (let i = 1; i < rows.length - 1; i++) {
    112. let tr = rows[i];
    113. let xj = parseInt(tr.cells[4].innerText);
    114. total += xj;
    115. }
    116. rows[rows.length-1].cells[1].innerText = total;
    117. };
    118. function showHand() {
    119. let priceTD = event.srcElement;
    120. //cursor光标
    121. priceTD.style.cursor = "pointer";
    122. }
    123. function showBGColor() {
    124. //window.event表示当前发生的事件 ”window.“可以省略
    125. // console.log(window.event);
    126. // alert(window.event);
    127. let obj = window.event.srcElement;
    128. //alert(obj);
    129. //console.log(obj); //发现obj是td,而不是tr。事件传递现象
    130. if (obj.tagName == "TD") {
    131. let td=obj;
    132. //parentElement:父元素 td的父元素是tr。tr有很多td子元素
    133. let tr = td.parentElement;
    134. tr.style.backgroundColor = "purple";
    135. //获取当前所有单元格,然后设置单元格中字体的颜色
    136. let tds = tr.cells;
    137. for (let i = 0; i length; i++) {
    138. tds[i].style.color = "white";
    139. }
    140. }
    141. }
    142. function clearBGColor() {
    143. let td = window.event.srcElement;
    144. if (td.tagName == "TD") {
    145. let tr = td.parentElement;
    146. tr.style.backgroundColor = "transparent";
    147. //获取当前行所有单元格,然后设置单元格中字体的颜色
    148. let tds = tr.cells;
    149. for (let i = 0; i < tds.length; i++) {
    150. tds[i].style.color = "#031f02";
    151. }
    152. }
    153. }

    2、fruit.html

    1. html>
    2. <html lang="zh_CN">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>js-DOM/BOM实战title>
    8. <link href="style/fruit.css" rel="stylesheet">link>
    9. <script src="js/鼠标悬浮和离开事件.js">script>
    10. head>
    11. <body>
    12. <div id="div0">
    13. <div id="div_title">欢迎使用水果库存系统div>
    14. <div id="div2">
    15. <table id="fruit_tbl">
    16. <tr>
    17. <th class="w10"><input type="checkbox" />th>
    18. <th class="w20">名称th>
    19. <th class="w20">单价th>
    20. <th class="w20">数量th>
    21. <th class="w20">小计th>
    22. <th class="w10">操作th>
    23. tr>
    24. <tr>
    25. <td><input type="checkbox" />td>
    26. <td>苹果td>
    27. <td>5td>
    28. <td>2td>
    29. <td>10td>
    30. <td><img src='imgs/del.png' class="delBtn"/>td>
    31. tr>
    32. <tr>
    33. <td><input type="checkbox" />td>
    34. <td>菠萝td>
    35. <td>3td>
    36. <td>5td>
    37. <td>15td>
    38. <td><img src='imgs/del.png' class="delBtn"/>td>
    39. tr>
    40. <tr>
    41. <td><input type="checkbox" />td>
    42. <td>哈密瓜td>
    43. <td>4td>
    44. <td>5td>
    45. <td>20td>
    46. <td><img src='imgs/del.png' class="delBtn"/>td>
    47. tr>
    48. <tr>
    49. <td><input type="checkbox" />td>
    50. <td>葡萄td>
    51. <td>10td>
    52. <td>5td>
    53. <td>50td>
    54. <td><img src='imgs/del.png' class="delBtn"/>td>
    55. tr>
    56. <tr>
    57. <td><input type="checkbox" />td>
    58. <td>青梅td>
    59. <td>10td>
    60. <td>5td>
    61. <td>50td>
    62. <td><img src='imgs/del.png' class="delBtn"/>td>
    63. tr>
    64. <tr>
    65. <td><input type="checkbox" />td>
    66. <td>人参果td>
    67. <td>10td>
    68. <td>5td>
    69. <td>50td>
    70. <td><img src='imgs/del.png' class="delBtn"/>td>
    71. tr>
    72. <tr>
    73. <td><input type="checkbox" />td>
    74. <td>菠萝蜜td>td>
    75. <td>10td>
    76. <td>5td>
    77. <td>50td>
    78. <td><img src='imgs/del.png' class="delBtn"/>td>
    79. tr>
    80. <tr>
    81. <td><input type="checkbox" />td>
    82. <td>西红柿td>
    83. <td>10td>
    84. <td>5td>
    85. <td>50td>
    86. <td><img src='imgs/del.png' class="delBtn"/>td>
    87. tr>
    88. <tr>
    89. <td colspan="2">总结:td>
    90. <td colspan="4">0td>
    91. tr>
    92. table>
    93. div>
    94. div>
    95. body>
    96. html>

    3、fruit.css

    1. *{
    2. color:rgb(3, 31, 2);
    3. font-weight: lighter;
    4. }
    5. body{
    6. padding:0;
    7. margin:0;
    8. background-color: rgb(3, 31, 2);
    9. }
    10. #div0{
    11. width:80%;
    12. border:0px solid red;
    13. background-color: rgb(209, 230, 235);
    14. margin-left:10%;
    15. padding-top:48px;
    16. padding-bottom:48px;
    17. margin-top:8px;
    18. }
    19. #div_title{
    20. width:80%;
    21. margin-left:10%;
    22. text-align: center;
    23. font-size:24px;
    24. letter-spacing: 4px;
    25. margin-bottom:16px;
    26. }
    27. #div2{
    28. margin-left:10%;
    29. border:0px solid red;
    30. width:80%;
    31. }
    32. .delBtn{
    33. width:16px;
    34. height:16px;
    35. }
    36. #fruit_tbl , #fruit_tbl td, #fruit_tbl th {
    37. border:1px solid lightgray;
    38. text-align: center;
    39. }
    40. #fruit_tbl{
    41. width:100%;
    42. line-height: 32px;
    43. border-collapse: collapse;
    44. }
    45. .w10{
    46. width:10%;
    47. }
    48. .w15{
    49. width:15%;
    50. }
    51. .w20{
    52. width:20%;
    53. }

     4、function $(){ }

    1. //这个函数是一个JavaScript函数,使用$作为函数名。它接受一个参数name作为输入。
    2. //首先,它检查name是否存在。如果存在,它会检查name是否以"#"字符开头。
    3. //如果是,它会去掉开头的"#"字符,然后返回一个具有该名称的DOM元素。
    4. //如果name不以"#"字符开头,或者不存在,则返回undefined。
    5. function $(name) {
    6. if (name) {
    7. //假设name是 #fruit_tbl
    8. if (name.startsWith("#")) {
    9. name = name.substring(1); //fruit_tbl
    10. return document.getElementById(name);
    11. }
    12. }
    13. }

    这是一个简单的JavaScript函数,用于获取DOM元素。它接收一个字符串参数name作为选择器,并返回相应的DOM元素。如果name以"#"开头,则假设它是元素的id,将获取具有该id的元素。

    例如,如果要获取id为"fruit_tbl"的表格元素,可以使用以下代码:

    var fruitTable = $(“#fruit_tbl”);  // 获取表格元素
    

    该函数只支持以"#"开头的id选择器,无法处理其他类型的选择器(如class选择器、标签选择器等)。

    把这个函数叫做 "$" 并且它接受一个参数 "name"。如果传入了 "name",则会检查它是否以 '#' 开头。如果是以 '#' 开头,则截取掉 '#',并返回该 ID 对应的 DOM 元素。如果 "name" 不是以 '#' 开头,则返回 undefined。

    这是一个简单的$选择器函数的实现,可以用来获取DOM元素。

    首先判断传入的参数name是否存在,如果存在则继续判断name是否以"#"开头,如果是,则将"#"去掉,得到真实的DOM元素id名称,然后使用document.getElementById方法获取该DOM元素,并返回。

    例如,若执行代码$(“#fruit_tbl”),则会返回id为“fruit_tbl”的DOM元素对象。

    这个函数是一个简单的选择器,它接受一个参数 name,如果 name# 开头,就认为它是一个 id 选择器,将 name 去掉 # 后通过 document.getElementById 函数获取对应的元素。

    例如,如果页面中有一个 id 为 fruit_tbl 的元素,可以通过以下方式获取该元素:

    var fruitTable = $('#fruit_tbl');
    

    5、$

    在 JavaScript 中,$ 不是一个保留字符或关键字,它只是一个普通的字符而已,只不过在许多流行的 JavaScript 库和框架中,都经常使用 $ 作为一个函数或对象的名称前缀,以简化代码和提高可读性。

    例如,在 jQuery 中,$ 是一个全局函数,它可以接受一个 CSS 选择器作为参数,返回匹配该选择器的所有元素的 jQuery 对象。在一些其他的 JavaScript 库和框架中,$ 可能扮演其他不同的角色,比如代表某个库的命名空间或者作为某个方法的简写等等。因此在具体应用中,需要结合文档和具体使用场景来确定 $ 的意义和作用。

    $ 在 JavaScript 中其实只是一个普通的合法字符,没有任何特殊含义。但是在一些流行的 JavaScript 库和框架中,比如 jQuery,$ 被定义成了一个函数或者对象,用来简化代码中的操作和查询。

    在 jQuery 中,$ 函数可以接受一个 CSS 选择器,选中符合条件的元素。例如,选中所有 classclickable 的按钮可以这样写:

    $('.clickable')
    

    $ 还可以用来创建新的 jQuery 对象或者执行一些操作,比如:

    1. $('
      ') // 创建一个新的 div 元素,返回一个 jQuery 对象
    2. $.ajax() // 执行一个 Ajax 请求

    在其他的 JavaScript 库和框架中,$ 可能有不同的用法和意义,需要根据具体的文档进行理解和使用。

    $是JavaScript中一个有效的变量名,类似于字母、数字或下划线。在JavaScript中,$通常被用作函数或变量名的前缀,用于标识这些函数或变量与jQuery这个库相关联。因为jQuery库非常强大和流行,所以许多开发者已经把$符号当成了jQuery库的默认别名。但是,在使用$之前,需要先导入jQuery库,否则会出现错误。

    在 JavaScript 中,$ 符号通常被用作函数或变量名的前缀或前导符号。它本身并没有特殊的含义或语法规则。实际上,$ 符号可以被看做是一个有效的 JavaScript 标识符,因此可以在变量名或函数名中使用。

    虽然 $ 符号没有特殊含义,但是在 JavaScript 中经常将其作为函数名的前导符号来表示该函数返回一个 DOM 元素或 jQuery 对象。例如,$('#myElement') 就表示通过 jQuery 获取 id 为 myElement 的元素。

    需要注意的是,并非所有 JavaScript 库或框架都会使用 $ 符号作为函数名的前导符号。因此,如果使用了不同的库或框架,最好查看其文档以了解相应的使用规则。

  • 相关阅读:
    多环境 Flink Job 的生成方案(Maven)
    微服务实战 01 微服务的发展史
    想兼职?学网络安全,钱赚到你手软
    小程序授权头像昵称改为头像昵称填写能力详解
    【Vue-Element-Admin】select模糊查询
    基于java的ssm框架农夫果园管理系统设计与实现
    不断电的品牌营销,2023年如何打造韧性力量!
    【问题解决】Ubuntu 安装 SeisSol 依赖 easi 报错解决: undefined reference to `H5free_memory‘
    Swagger简单使用
    航顺 HK32F030C8T6 单片机MCU控制器
  • 原文地址:https://blog.csdn.net/m0_65152767/article/details/134438359