<table id="table">
  <tr>
    <th>用户ID</th>
    <th>用户名</th>
    <th>手机号码</th>
    <th>状态</th>
    <th>操作</th>
  </tr>
  <tr>
    <td>zhangsan</td>
    <td>张三</td>
    <td>13888888888</td>
    <td>可用</td>
    <td>
      <span onclick="updateRow(1)">修改</span>      点击修改调用updateRow(num)函数,将num赋值为1
      <span onclick="deleteRow(1)">删除</span>        点击删除调用deleteRow(num)函数,将num赋值为1
    </td>
  </tr>
  <tr>
    <td>zhangsan</td>
    <td>张三</td>
    <td>13888888888</td>
    <td>可用</td>
    <td>
      <span onclick="updateRow(2)">修改</span>
      <span onclick="deleteRow(2)">删除</span>
    </td>
  </tr>
  <tr>
    <td>zhangsan</td>
    <td>张三</td>
    <td>13888888888</td>
    <td>可用</td>
    <td>
      <span onclick="updateRow(3)">修改</span>
      <span onclick="deleteRow(3)">删除</span>
    </td>
  </tr>
</table>

function deleteRow(num){
  var table = document.getElementById("table");
  var row = table.rows[num];
  var isDel = confirm("确定要删除吗?");     通过将confirm的值赋给isDel来判断点击的是那个键
  if(!isDel){                   isDel的值为假,执行if结束函数。
    alert("取消删除!");
    return;
  }

  for (var i=0;i<row.cells.length;i++) {           
    row.cells[i].style.cssText = "text-decoration: line-through;color:#929292;"  点击确定将被删除行每一个单元格文字样式改掉
  }

  row.cells[row.cells.length-1].lastElementChild.removeAttribute("onclick");       移除本行最后一个单元格的onclick属性
  row.cells[row.cells.length-1].firstElementChild.removeAttribute("onclick");   移除本行最后一个单元格的onclick属性
  row.lastElementChild.firstElementChild.innerHTML = "修改";
  row.setAttribute("contenteditable","false");    将本行contenteditable属性改为false,不能修改。
}

function updateRow(num){
  var table = document.getElementById("table");
  var row = table.rows[num];
  var spanText = row.cells[row.cells.length-1].firstElementChild;

  if(spanText.innerText=="修改"){      如果本行最后一个单元格里的内容是修改,执行if将其改为完成,除最后一个单元格内容可修改
    spanText.innerText="完成";

    for (var i=0;i<row.cells.length-1;i++) {
      row.cells[i].setAttribute("contenteditable","true");
    }

  }else{
    spanText.innerText="修改";       如果本行最后一个单元格里的内容是完成,执行else将其改为修改,单元格内容不可修改
    for (var i=0;i<row.cells.length-1;i++) {
      row.cells[i].setAttribute("contenteditable","false");
    }
  }
}
  var isAlt = 0;
  var isEnt = 0;   键位判断
  document.onkeydown = function(e){
    if(e.keyCode==18){
      isAlt = 1;    按下的是alt
    }
    if(e.keyCode==13){
      isEnt = 1;  按下的是enter
    }
  var table = document.getElementById("table");
  var rows = table.rows;
  if(isEnt==1&&isAlt==0){  只按enter本行修改完成,将修改改成完成,contenteditable改为false。
    for (var i=1;i<rows.length;i++) {
      for (var j=0;j<rows[i].cells.length-1;j++) {
        rows[i].cells[j].setAttribute("contenteditable","false");
      }
      rows[i].lastElementChild.firstElementChild.innerText
      ="修改";
  }
  }else if(isEnt==1&&isAlt==1){   enter 和alt同时按,换行。
    document.activeElement.innerHTML = document.activeElement.innerHTML+"<br/>";
  }
}

  document.onkeyup = function(e){   键盘抬起,令isEnt ,isAlt=0,上方if全不满足,按键失效。
    if(e.keyCode==13){
      isEnt = 0;    
    }else if(e.keyCode==18){
      isAlt = 0;
    }
}

以上js实现的效果:点击修改使前四列成为可编辑状态,点击删除弹出提示是否删除,点击回车结束修改状态,修改状态点击完成结束修改状态使表格不能修改。

js实现banner图切换

<div id="banner">
  <div id="inside"><img src="img/banner1.png" id="img1" /><img src="img/banner2.png" id="img2" /><img src="img/banner3.png" id="img3" /><img     src="img/banner4.png" id="img4" /><img src="img/banner1.png" id="img5" />    这样写是为了img之间没有空隙
  </div>

  <ul id="bannerNum">        点击相应的1,2,3,4调用changeBanner(num1)函数,将num赋值为1,2,3,4.
    <li onclick="changeBanner(1)">1</li>
    <li onclick="changeBanner(2)">2</li>
    <li onclick="changeBanner(3)">3</li>
    <li onclick="changeBanner(4)">4</li>
  </ul>
</div>

js函数:

var num = 1;  定义全局变量num和inside
var inside;
window.onload = function(){   用于让banner图自动切换的函数

  inside = document.getElementById("inside");

  var interval = setInterval(function(){    每2秒执行一次此函数
    inside.style.transition = "all 1s ease";
    num++;              每执行一次函数让num+1;
    switch (num){           根据num的值判断此时应做的改变,因为图宽1920px,所以每执行一次函数让banner的div向左走1920px。
      case 1:
        inside.style.transition = "none";   
        inside.style.marginLeft = (-960)+"px";
      break;
      case 2:
        inside.style.marginLeft = (-960-1920)+"px";
      break;
      case 3:
        inside.style.marginLeft = (-960-1920*2)+"px";
      break;
      case 4:
        inside.style.marginLeft = (-960-1920*3)+"px";
      break;
      case 5:
        inside.style.marginLeft = (-960-1920*4)+"px";
        num = 0;       banner图轮完一遍,让num归0,banner的div回归第一张图居中的状态。
      break;
      default:
      break;
    }
  },2000);
}

  function changeBanner(num1){   通过调用时赋给num1 的值判断应显示第几张图改变相应的div的margin-left值
    inside.style.transition = "none";
    switch (num1){
      case 1:
        inside.style.marginLeft = (-960)+"px";
      break;
      case 2:
        inside.style.marginLeft = (-960-1920)+"px";
      break;
      case 3:
        inside.style.marginLeft = (-960-1920*2)+"px";
      break;
      case 4:
        inside.style.marginLeft = (-960-1920*3)+"px";
      break;
      default:
      break;
  }

  num = num1-1;

}

发表新评论:

<div id="outside">
  <h3>最新评论</h3>

  <div id="comment">
    <div id="comment1" class="comment1">
      腾讯网友
      <span>李二狗</span>
      <time>2010年10月5日 19:21:12</time>
      <p>
        公务员好啊!可以为人民服务!
      </p>
    </div>
  </div>

  <h4>发表评论</h4>

  <div id="addComment">
    昵&nbsp;&nbsp;&nbsp;&nbsp;称:<input type="text" id="name" />
    <br /><br />
    评论内容:<textarea id="comContent"></textarea>

    <button onclick="addComment()">提交评论</button>
  </div>
</div>

js函数写法:

  var idNum = 1;   
  function addComment(){
    idNum++;         用2,3,4……来给新增的每一行命名不同的id。
    var inputValue = document.getElementById("name").value;       取到在昵称一栏中输入的内容赋值给inputValue
    var textValue = document.getElementById("comContent").value;    取到在评论一栏中输入的内容赋值给textValue

    if(inputValue==""||textValue==""){      判断输入是否为空,如果为空,弹窗提示函数结束。
      alert("昵称和评论内容不能为空!!");
      return;
    }

    var comContent1 = document.getElementById("comment1");    取到评论一一行,
    var newComment = comContent1.cloneNode(true);    复制评论一和它的所有子元素,
    newComment.setAttribute("id","comment"+idNum);  将新的评论的id改为comment+相应的idNum值,
    newComment.getElementsByTagName("span")[0].innerText = inputValue;    将所复制的新的评论的span内容改为取到的昵称一栏的内容,即inputValue
    newComment.getElementsByTagName("p")[0].innerText = textValue;       将所复制的新的评论的p内容改为取到的评论一栏的内容,即textValue

    var commentDiv = document.getElementById("comment");  取到评论div的父容器,将新评论div插入到该父容器的最后,成为它的最后一行。
    commentDiv.appendChild(newComment);

    document.getElementById("name").value = "";  提交评论后将输入内容清空
    document.getElementById("comContent").value = "";

}

js中比较实用的函数用法的更多相关文章

  1. jquery中attr()与prop()函数用法实例详解(附用法区别)

    本文实例讲述了jQuery中attr()与prop()函数用法.分享给大家供大家参考,具体如下: 一.jQuery的attr()方法 jquery中用attr()方法来获取和设置元素属性,attr是a ...

  2. 第22篇 js中的this指针的用法

    前面把js的相关知识总结了下,今天把js中的上下文的this,对于强类型语言,this的用法非常的单一,因为他们没有js特有的动态绑定. 首先看下面代码: function funcA() { thi ...

  3. js中的this指针的用法

    首先看下面代码: function funcA() { this.name = "hello"; console.log(this.name); this.show = funct ...

  4. js中substring和substr的用法

    js中substring和substr的用法 substring 方法用于提取字符串中介于两个指定下标之间的字符 substring(start,end) 开始和结束的位置,从零开始的索引 参数    ...

  5. JS中的自执行函数

    本来规划的是2013年,狠狠的将JS学习下,谁知计划赶不上变化,计划泡汤了.13年的我对JS来说可以说是属于跟风,对它的理解和认识也仅仅是皮毛而已,也是因为要完成<ArcGIS API for ...

  6. main.js中封装全局登录函数

    1. 在 main.js 中封装全局登录函数 通过 vue 对象的原型扩展,可以扩展一个函数,这样这个函数就可以在每一个界面通过类似指向对象的方式,去访问这个函数. 如下是 main.js 扩展的函数 ...

  7. python中enumerate()函数用法

    python中enumerate()函数用法 先出一个题目:1.有一 list= [1, 2, 3, 4, 5, 6]  请打印输出:0, 1 1, 2 2, 3 3, 4 4, 5 5, 6 打印输 ...

  8. js中的三种函数写法

    js中的三种函数写法 <script type="text/javascript"> //普通的声明方式 function myFun(m,n){ alert(m+n) ...

  9. JS中构造函数和普通函数有什么区别

    JS中构造函数有普通函数有什么区别? 1.一般规则 构造函数都应该以 一个大写字母开头,eg: function Person(){...} 而非构造函数则应该以一个小写字母开头,eg: functi ...

随机推荐

  1. A Secure Cookie Protocol 安全cookie协议 配置服务器Cookie

    Title http://www.cse.msu.edu/~alexliu/publications/Cookie/cookie.pdf AbstractCookies are the primary ...

  2. util 常用方法

    C:\Program Files\Java\jdk1.8.0_171\src.zip!\java\lang\System.java /** * Returns the current time in ...

  3. ICO成本价

    [当前ICO成本价]仅供参考:ICOcoin 成本价1元SNT 成本价0.26元UGT 成本价2.7元PAY 成本价6元OMG 成本价2.6元YOYO 成本价 0.17元BNT 成本价26元BAT 成 ...

  4. Mysql日常操作

    创建用户并授权 grant all privileges on test.* to "test"@"localhost" identified by " ...

  5. python中yield使用

    16.yield使用   列表推导与生成器表达式   当我们创建了一个列表的时候,就创建了一个可以迭代的对象: >>> squares=[n*n for n in range(3)] ...

  6. 持续集成之戏说Check-in Dance(转)

    add by zhj: 先说一下持续集成的定义,这是ThoughtWorks首席科学家Martin Fowler在<持续集成>第二版中给出的,“持续集成是一种软件开发实践.在持续集成中,团 ...

  7. Linux 下的同步机制

    2017-03-10 回想下最初的计算机设计,在单个CPU的情况下,同一时刻只能由一个线程(在LInux下为进程)占用CPU,且2.6之前的Linux内核并不支持内核抢占,当进程在系统地址运行时,能打 ...

  8. Python并行编程(十):多线程性能评估

    1.基本概念 GIL是CPython解释器引入的锁,GIL在解释器层面阻止了真正的并行运行.解释器在执行任何线程之前,必须等待当前正在运行的线程释放GIL,事实上,解释器会强迫想要运行的线程必须拿到G ...

  9. Celery(一个懂得 异步任务、定时任务、周期任务 的"芹菜")

    一.什么是Celery? Celery 是基于Python实现的模块,用于执行异步.定时.周期任务的,其结构的组成是: - 用户任务 app - 管道 broker 用于存储任务(官方推荐 redis ...

  10. CanvasRenderingContext2D.imageSmoothingEnabled

    https://developer.mozilla.org/zh-CN/docs/Web/API/CanvasRenderingContext2D/imageSmoothingEnabled 这是一个 ...