</script>
<input type="checkbox" name="aaa" value="1" />1
<input type="checkbox" name="aaa" value="2" />2
<input type="checkbox" name="aaa" value="3" />3
<input type="checkbox" name="aaa" value="4" />4
<input type="checkbox" name="aaa" value="5" />5
<input type="checkbox" name="aaa" value="6" />6
<input type="button" value="選中查看" onclick="c()"/>
<input type="button" value="反選" onclick="d()" />
<input type="button" value="全選" onclick="e()" />
<br />
如果需要將復選框選中的值操作,可在循環里面加字符串拼接,每個用逗號隔開,在js里頁面跳轉,憑借的字符串如果是數組,作為url傳遞的參數,接手后不是數組,是字符串形式的,只要用函數分割就ok了。
<script>
function addline() {
var table1=document.createElement("table");
var row=table1.insertRow();
var td1=row.insertCell();
td1.innerHTML=document.getElementById("name1").value;
var td2=row.insertCell();
td2.innerHTML=document.getElementById("age1").value;
var td3=row.insertCell();
td3.innerHTML='<input type="button" value="刪除" onclick="deleteRow(this.parentElement)" />';
document.getElementById("div1").appendChild(table1);
table1.setAttribute('border','1');
}
function deleteRow(obj) {
obj.parentElement.removeChild(obj);
}
</script>
<body>
<div id="div1" style="">
</div>
<input type="text" name="name" id="name1" />
<input type="text" name="age" id="age1" />
<input type="button" value="PRESS" onclick="return addline();" />
</body>
</html>
<script>
function addline() {
var table1=document.getElementById("tb1");
var row1=document.createElement("tr");
var td1=document.createElement("td");
var td2=document.createElement("td");
var td3=document.createElement("td");
var id1=document.getElementById("id1").value;
var name1=document.getElementById("name1").value;
var age1=document.getElementById("age1").value;
var txt1=document.createTextNode(id1);
var txt2=document.createTextNode(name1);
var txt3=document.createTextNode(age1);
td1.appendChild(txt1);
td2.appendChild(txt2);
td3.appendChild(txt3);
row1.appendChild(td1);
row1.appendChild(td2);
row1.appendChild(td3);
table1.appendChild(row1);
}
</script>
<body id="bd">
<table id="tb1" border="1">
<tr>
<td>ID</td>
<td>NAME</td>
<td>AGE</td>
</tr>
</table>
<input type="text" id="id1" />
<input type="text" id="name1" />
<input type="text" id="age1" />
<br/>
<input type="button" value="PRESS" onclick="return addline();"/>
</body>
</html>
<script>
function addline() {
var tb = document.getElementById("mytable");
var row = tb.insertRow(tb.rows.length);
var colname = row.insertCell(row.cells.length);
var colage = row.insertCell(row.cells.length);
var colbutton = row.insertCell(row.cells.length);
colname.innerHTML = document.getElementById("name1").value;
colage.innerHTML = document.getElementById("age1").value;
colbutton.innerHTML = '<input type="button" value="刪除" onclick="deleteRow('
+ (tb.rows.length - 1) + ')" />'
}
function deleteRow(index) {
var tb = document.getElementById("mytable");
tb.deleteRow(index);
}
</script>
<body>
<table id="mytable" border="1">
<tr>
<td>NAME</td>
<td>AGE</td>
<td>OPERATE</td>
</tr>
</table>
<input type="text" name="name" id="name1" />
<input type="text" name="age" id="age1" />
<input type="button" value="PRESS" onclick="return addline();" />
</body>
</html>
方法一:使用createElement生成表格,使用insertRow和insertCell方法生成行列,單元格的內容使用innerHTML屬性進行填充。
方法二:使用createElement生成表格,使用CreateElement方法生成行列,單元格的內容使用了createTextNode方法填充。
方法三:拼接表格innerHTML屬性的字符串,使用字符串 += 操作符鏈接字符串
方法四:拼接表格innerHTML屬性的字符串,各個字符串追加數組里面,最后調用數組的join方法生成目標字符串。
運行時間比較:
方法 | 運行時間(ms) |
方法一 | 93037 |
方法二 | 3341 |
方法三 | 2795 |
方法四 | 500 |
具體的程序如下:
function createTable4() {
var data = new Array();
data.push('<table border=1><tbody>');
for (var i = 0; i < 2000; i++) {
data.push('<tr>');
for (var j = 0; j < 5; j++) {
data.push('<td>' + i + ',' + j + '</td>');
}
data.push('</tr>');
}
data.push('</tbody><table>');
document.getElementById('table1').innerHTML = data.join('');
}
function showFunctionRunTime(f) {
var t1 = new Date();
f();
var t2 = new Date();
alert(t2 - t1);
}
//-->
</script>
</head>
<body>
<div id="table1" style="border: 1px solid black">
</div>
<script>
showFunctionRunTime(createTable);
showFunctionRunTime(createTable2);
showFunctionRunTime(createTable3);
showFunctionRunTime(createTable4);
</script>
</body>
</html>
原文出處:http://abaper.blogbus.com/logs/8278500.html
、
動態刪除表格
方法1:
<table id=mxh border=1>
<tr>
<td>第1行</td><td onclick="deleteRow('mxh',this.parentElement.rowIndex)">刪除本行</td>
</tr>
<tr>
<td>第2行</td><td onclick="deleteRow('mxh',this.parentElement.rowIndex)">刪除本行</td>
</tr>
</table>
<script>
function deleteRow (tableID, rowIndex) {
var table =document.all[tableID]
table.deleteRow(rowIndex);
}
</script>
方法2:
<table id=mxh border=1>
<tr>
<td>第1行</td><td onclick="deleteRow(this.parentElement)">刪除本行</td>
</tr>
<tr>
<td>第2行</td><td onclick="deleteRow(this.parentElement)">刪除本行</td>
</tr>
</table>
<script>
function deleteRow (obj) {
obj.parentElement.removeChild(obj);
}
</script>
第一、在項目中引入dwr.jar,然后在web.xml中進行配置,配置如下:
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>
org.directwebremoting.servlet.DwrServlet
</servlet-class>
<init-param>
<param-name>crossDomainSessionSecurity</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>allowScriptTagRemoting</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>classes</param-name>
<param-value>java.lang.Object</param-value>
</init-param>
<init-param>
<param-name>activeReverseAjaxEnabled</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>initApplicationScopeCreatorsAtStartup</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>maxWaitAfterWrite</param-name>
<param-value>3000</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>logLevel</param-name>
<param-value>WARN</param-value>
</init-param>
</servlet>
第二:在web.xml的同級目錄下新建dwr.xml文件,內容如下
<!DOCTYPE dwr PUBLIC
"-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN"
"http://getahead.org/dwr/dwr30.dtd">
<dwr>
<alow>
<create creator="new" javascript="MessagePush">
<param name="class" value="com.huatech.messageremind.service.MessagePush"/>
</create>
</alow>
</dwr>
這個是dwr的基本配置,MessagePush在頁面的javascript中使用,com.huatech.messageremind.service.MessagePush實現了想要調用的方法,MessagePush我覺得就相當于java類中的一個映射,在javascript中使用MessagePush.java類中實現的方法,即可在dwr中調用。
第三,要想使用dwr,還要在你想要推送的頁面中引入script,
<script type="text/javascript" src="<%=basepath%>dwr/engine.js"></script>
<script type="text/javascript" src="<%=basepath%>dwr/util.js"></script>
<script type="text/javascript" src="<%=basepath%>dwr/interface/MessagePush.js"></script>
可以看見,也引入了dwr.xml中配置的javascript,engine.js和util.js是必須引入的。
以上三點都是基本配置,沒什么好說的,想使用dwr,就得這么做。
第四,實現消息的精準推送
消息推送簡單,但是想實現精準推送就需要做一些別的操作了
1 在任何一個用戶登錄的時候,都需要將其userId或者其他唯一性標識放入session中,我放的是userId,
這里就以 userId為唯一性標識。
2 在載入想推送的頁面時,需要onload一個我在MessagePush類中實現的方法,當然了,需要使用dwr調用
js的調用方法如下:
function onPageLoad(){
var userId = '${userinfo.humanid}';
MessagePush.onPageLoad(userId);
}
<body onload="dwr.engine.setActiveReverseAjax(true);dwr.engine.setNotifyServerOnPageUnload(true);onPageLoad();> 在onload中的三個函數都是必須的,其中dwr.engine.setActiveReverseAjax(true);dwr.engine.setNotifyServerOnPageUnload(true);是dwr中的函數。
MessagePush類中實現的方法如下:
public void onPageLoad(String userId) {
ScriptSession scriptSession = WebContextFactory.get().getScriptSession();
scriptSession.setAttribute(userId, userId);
DwrScriptSessionManagerUtil dwrScriptSessionManagerUtil = new DwrScriptSessionManagerUtil();
try {
dwrScriptSessionManagerUtil.init();
} catch (ServletException e) {
e.printStackTrace();
}
}
大家注意到,onPageLoad方法中還有一個名為DwrScriptSessionManagerUtil的類,該類如下實現:
public class DwrScriptSessionManagerUtil extends DwrServlet{
private static final long serialVersionUID = -7504612622407420071L;
public void init()
throws ServletException {
Container container = ServerContextFactory.get().getContainer();
ScriptSessionManager manager = container
.getBean(ScriptSessionManager.class);
ScriptSessionListener listener = new ScriptSessionListener() {
public void sessionCreated(ScriptSessionEvent ev) {
HttpSession session = WebContextFactory.get().getSession();
String userId =((User) session.getAttribute("userinfo")).getHumanid()+"";
System.out.println("a ScriptSession is created!");
ev.getSession().setAttribute("userId", userId);
}
public void sessionDestroyed(ScriptSessionEvent ev) {
System.out.println("a ScriptSession is distroyed");
}
};
manager.addScriptSessionListener(listener);
}
}
第四步是最最重要的,為了第四步我研究了兩天多,下面開始消息推送。
第五、消息推送
在你想要推送消息的時候,調用如下方法:
public void sendMessageAuto(String userid,String message) {
final String userId = userid ;
final String autoMessage = message;
Browser.withAllSessionsFiltered(new ScriptSessionFilter() {
public boolean match(ScriptSession session) {
if (session.getAttribute("userId") == null)
return false;
else
return (session.getAttribute("userId")).equals(userId);
}
}, new Runnable(){
private ScriptBuffer script = new ScriptBuffer();
public void run() {
script.appendCall("showMessage", autoMessage);
Collection<ScriptSession> sessions = Browser
.getTargetSessions();
for (ScriptSession scriptSession : sessions) {
scriptSession.addScript(script);
}
}
});
}
userid即為你想推給消息的人,message為你想推送的消息,大家注意到這里script.appendCall("showMessage", autoMessage);
其中showMessage為在想推送的頁面中的javascript方法,autoMessage是這個方法的參數,這樣那個頁面就能得到推送的內容了,至于如何展現,就看你的需要了。
至此,一個dwr消息精準推送的步驟就寫完了,其實很多東西都不難,只是我們不知道該怎么用而已。
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>js實現checkbox全選,反選,全不選</title>
</head>
<script type="text/javascript" src="js/jquery-1.6.4.js"></script>
<script type="text/javascript">
//復選框全選
function checkAll(formvalue) {
var roomids = document.getElementsByName(formvalue);
for ( var j = 0; j < roomids.length; j++) {
if (roomids.item(j).checked == false) {
roomids.item(j).checked = true;
}
}
}
//復選框全不選
function uncheckAll(formvalue) {
var roomids = document.getElementsByName(formvalue);
for ( var j = 0; j < roomids.length; j++) {
if (roomids.item(j).checked == true) {
roomids.item(j).checked = false;
}
}
}
//復選框選擇轉換
function switchAll(formvalue) {
var roomids = document.getElementsByName(formvalue);
for ( var j = 0; j < roomids.length; j++) {
roomids.item(j).checked = !roomids.item(j).checked;
}
}
</script>
</head>
<body>
<input type="radio" name="all" id="all" onclick="checkAll('test')" />
全選
<input type="radio" name="all" id="Checkbox1"
onclick="uncheckAll('test')" /> 全不選
<input type="radio" name="all" id="Checkbox2"
onclick="switchAll('test')" /> 反選
<br />
<input name="test" value="復選框1" type="checkbox" /> 復選框1 <br />
<input name="test" value="復選框2" type="checkbox" /> 復選框2 <br />
<input name="test" value="復選框3" type="checkbox" /> 復選框3 <br />
<input name="test" value="復選框4" type="checkbox" /> 復選框4 <br />
<input name="test" value="復選框5" type="checkbox" /> 復選框5 <br />
<input name="test" value="復選框6" type="checkbox" /> 復選框6 <br />
</body>
</html>
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>js test</title>
</head>
<script type="text/javascript" src="js/jquery-1.6.4.js"></script>
<script type="text/javascript">
function selectAll(){
var name=document.getElementsByName('checkbox');
for(var i=0;i<name.length;i++){
if(name.item(i).checked==false)
name.item(i).checked=true;
}
}
</script>
<body>
<form name="myForm" method="post" action="CheckValue">
全選:<input type="radio" name="all" id="all" onclick="selectAll('checkebox')" /><br/>
表單名稱1: <input type="checkbox" name="checkbox" value="checkbox1" /><br/>
表單名稱2: <input type="checkbox" name="checkbox" value="checkbox2" /><br/>
表單名稱3: <input type="checkbox" name="checkbox" value="checkbox3" /><br/>
表單名稱4: <input type="checkbox" name="checkbox" value="checkbox4" /><br/>
表單名稱5: <input type="checkbox" name="checkbox" value="checkbox5" /><br/>
表單名稱6: <input type="checkbox" name="checkbox" value="checkbox6" /><br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>abs</display-name>
<servlet>
<servlet-name>CheckValue</servlet-name>
<servlet-class>org.abin.lee.servlet.CheckValue</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CheckValue</servlet-name>
<url-pattern>/CheckValue</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
package org.abin.lee.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CheckValue extends HttpServlet{
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String[] value=req.getParameterValues("checkbox");
for(int i=0;i<value.length;i++){
System.out.println("第"+i+"個:"+value[i]);
}
}
}