基于jQuery试卷自动排版系统


Posted in Javascript onJuly 18, 2010

需求
根据提供的试卷题目(是一个干净的只有“数据”的HTML网页)生成一份多页的试卷,用户能执行翻页、具有答题时间限制,展示给用户的试卷中题目需要占用尽量少的空间(比如选择题中把两条较短的选项由两行合并到一行)、同一道题目不要跨页面显示以方便答题者,管理员能够改变试卷的样式(字体、颜色、行距、页面边距,像字处理软件一样……),题目之间可以插入一些说明性的文字(比如告知答题者作答的须知等等)。题目提干、选择题的选项、说明文字可以包含多媒体信息(文字、图片、列表、表格、视频等等……)。选择题选项数目不限、单选多选不限。翻页要有可订制的动画效果

提供的试卷样板类似如下(Input):

<ol id="olThePaper"> 
<div class="Desc">选择题:说明文字。说明文字。说明文字。说明文字。说明文字。说明文字。说明文字。说明文字。说明文字。说明文字。说明文字。说明文字。说明文字。说明文字。</div> 
<div class="Problem" id="1"> 
<li>1.你认为怎样的老师是好老师?</li> 
<div class="Choices"> 
<label><input type="radio" name="prob1" value="A" />和学生平等相处,能全面满足学生各种需要</label> 
<label><input type="radio" name="prob1" value="B" />所在教学班的成绩优于其他平行班</label> 
<label><input type="radio" name="prob1" value="C" />严格管理学生、所带的班级班风良好</label> 
<label><input type="radio" name="prob1" value="D" />父母般地关心学生的生活和情绪状态</label> 
</div> 
</div> 
<div class="Problem" id="2"> 
<li>2.一位有15年教龄的英语教师,教了多年高三,可谓学校的核心骨干。一次接受邀请到外校介绍教学经验,台下有老师发表了观点并问到几个英语教法发面的问题,一下子把她给卡住了。这是因为</li> 
<div class="Choices"> 
<label><input type="radio" name="prob2" value="A" />她最近工作太累,注意力不够集中。</label> 
<label><input type="radio" name="prob2" value="B" />提问老师的观点和她的有很大不同。</label> 
<label><input type="radio" name="prob2" value="C" />由于长时间在教学一线拼搏,她对教学理论问题的关注度不高。</label> 
<label><input type="radio" name="prob2" value="D" />对学科教学的归纳和思考少,一时加工不过来。</label> 
</div> 
</div> 
<div class="Problem" id="3"> 
<li>3.哪张图片最好看?</li> 
<div class="Choices"> 
<label><input type="radio" name="prob3" value="A" />这一张<img src="img1.png" height="300px" width="400px" alt="img1"/>好看。</label> 
<label><input type="radio" name="prob3" value="B" />这一张<img src="img2.png" height="300px" width="400px" alt="img2"/>好看。</label> 
<label><input type="radio" name="prob3" value="C" />这一张<img src="img3.png" height="300px" width="400px" alt="img3"/>好看。</label> 
<label><input type="radio" name="prob3" value="D" />这一张<img src="img4.png" height="300px" width="400px" alt="img4"/>好看。</label> 
<label><input type="radio" name="prob3" value="E" />不知道。</label> 
</div> 
</div> 
<div class="Desc">填空题和选择题:一大堆的说明文字。一大堆的说明文字。一大堆的说明文字。一大堆的说明文字。一大堆的说明文字。</div> 
<div class="Problem" id="4"> 
<li>4.床前明月光,<input type="text" name="prob4" /></li> 
</div> 
<div class="Problem" id="5"> 
<li>5.你认为怎样的老师是好老师?</li> 
<div class="Choices"> 
<label><input type="checkbox" name="prob6" value="D" />和</label> 
<label><input type="checkbox" name="prob6" value="A" />所</label> 
<label><input type="checkbox" name="prob6" value="B" />严</label> 
<label><input type="checkbox" name="prob6" value="C" />父</label> 
<label><input type="checkbox" name="prob6" value="E" />和班的成绩班的成绩班的成绩班的成绩班的成绩</label> 
<label><input type="checkbox" name="prob6" value="F" />所班的成绩班的成绩班的成绩</label> 
<label><input type="checkbox" name="prob6" value="G" />严班的班的成绩班的成绩班的成绩班的成绩</label> 
<label><input type="checkbox" name="prob6" value="H" />啊</label> 
</div> 
</div> 
</ol>

思路
面对这种需求该怎么办呢?使用JavaScript了,看来。后来决定用jQuery,Aptana作IDE(虽然jQuery支持库在Windows上死活装不上去,换了个OS就好了,奇怪),格式么就用CSS了。

具体步骤:

导入试卷题目HTML
对所有选择题进行排版,把一行划分为四个位置,使选项尽量适应一个位置、两个位置或四个位置(也就是一行四项、一行两项或者一行一项的效果)
对所有题目进行分页
思路还是清晰的,但是由于浏览器众多,还是比较麻烦的,并且我是新手,没接触过jQuery之前……

实现
页面文件(和例子不同,但是格式一样的)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title>No title...</title> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<script language="JavaScript" src="lib/jquery/jquery-1.4.2.js" type="text/javascript"></script> 
<script language="JavaScript" src="lib/countdown/jquery.countdown.pack.js" type="text/javascript"></script> 
<script language="JavaScript" src="TestPaperProcessor.js" type="text/javascript"></script> 
<link href="style.css" rel="stylesheet" type="text/css" /> 
</head> 
<body> 
<div id="divToolbar"> 
<div id="divPrev">PrevPage</div> 
<div id="divNext">NextPage</div> 
<div id="divPageInfo">Loading the test...</div> 
<div id="divTimer"></div> 
</div> 
<form id="formPaper" action="demo.html" method="post" accept-charset="utf-8"> 
<ul> 
<div class="Display" id="divLeft"> 
left<!--the left page--> 
</div> 
<div class="Display" id="divRight"> 
right<!--the right page--> 
</div> 
</ul> 
<ol id="olThePaper"> 
<div class="Desc">选择题:说明文字。说明文字。说明文字。说明文字。说明文字。说明文字。说明文字。说明文字。说明文字。说明文字。说明文字。说明文字。说明文字。说明文字。</div> 
<div class="Problem" id="1"> 
<li>1你认为怎样的老师是好老师?</li> 
<div class="Choices"> 
<label> 
<input type="radio" name="prob1" value="D" />和学生平等相处,能全面满足学生各种需要 
</label> 
<label> 
<input type="radio" name="prob1" value="A" />所在教学班的成绩优于其他平行班 
</label> 
<label> 
<input type="radio" name="prob1" value="B" />严格管理学生/所带的班级班风良好 
</label> 
<label> 
<input type="radio" name="prob1" value="C" />父母般地关心学生的生活和情绪状态 
</label> 
</div> 
</div> 
<div class="Problem" id="2"> 
<li>2你认为怎样的老师是好老师?</li> 
<div class="Choices"> 
<label> 
<input type="radio" name="prob2" value="D" />和学生平jlsdjklsdf生各种需要 
</label> 
<label> 
<input type="radio" name="prob2" value="A" />所 
</label> 
<label> 
<input type="radio" name="prob2" value="B" />严格好 
</label> 
<label> 
<input type="radio" name="prob2" value="C" />父母关心学生的生活和情绪状态 
</label> 
</div> 
</div> 
<div class="Problem" id="3"> 
<li>3你认为怎样的老师是好老师?</li> 
<div class="Choices"> 
<label> 
<input type="radio" name="prob3" value="D" />和学生平等相处,能全面满足学生各种需要 
</label> 
<label> 
<input type="radio" name="prob3" value="A" />所在教学班的成绩优于其他平行班 
</label> 
<label> 
<input type="radio" name="prob3" value="B" />严格管理学生/所带的班级班风良好 
</label> 
<label> 
<input type="radio" name="prob3" value="C" />父母般地关心学生的生活和情绪状态 
</label> 
</div> 
</div> 
<div class="Problem" id="4"> 
<li>4你认为怎样的老师是好老师?</li> 
<div class="Choices"> 
<label> 
<input type="radio" name="prob4" value="D" />和学生平等相处,能全面满足学和学生平等相处,能全面满足学和学生平等相处,能全面满足学和学生平等相处,能全面满足学和学生平等相处,能全面满足学和学生平等相处,能全面满足学和学生平等相处,能全面满足学和学生平等相处,能全面满足学和学生平等相处,能全面满足学生各种需要 
</label> 
<label> 
<input type="radio" name="prob4" value="A" />所在教学班的成绩优于其他平行班 
</label> 
<label> 
<input type="radio" name="prob4" value="B" />严格管理学生/所带的班级班风良好 
</label> 
<label> 
<input type="radio" name="prob4" value="C" />父母般地关心学生的生活和情绪状态 
</label> 
</div> 
</div> 
<div class="Desc">还是选择题:一大堆的说明文字。一大堆的说明文字。一大堆的说明文字。一大堆的说明文字。一大堆的说明文字。</div> 
<div class="Problem" id="10"> 
<li>5你认为怎样的老师是好老师?</li> 
<div class="Choices"> 
<label> 
<input type="radio" name="prob5" value="D" />和10学生平等相处,能全面满足学生各种需要 
</label> 
<label> 
<input type="radio" name="prob5" value="A" />所10在教学班的成绩优于其他平行班 
</label> 
<label> 
<input type="radio" name="prob5" value="B" />严10jhjhjhjhkljlkjjkljjkjjkllkjlkjljkjljlkj格管文字 
</label> 
<label> 
<input type="radio" name="prob5" value="C" />父10母般地关心学生的生活和情绪状态 
</label> 
</div> 
</div> 
<div class="Problem" id="5"> 
<li>5你认为怎样的老师是好老师?</li> 
<div class="Choices"> 
<label> 
<input type="radio" name="prob5" value="D" />和学生平等相处,能全面满足学生各种需要 
</label> 
<label> 
<input type="radio" name="prob5" value="A" />所在教学班的成绩优于其他平行班 
</label> 
<label> 
<input type="radio" name="prob5" value="B" />严jhjhjhjhkljlkjjkljjkjjkllkjlkjljkjljlkj格管<img src="aaaa9.jpg" height="300px" width="400px" alt="pic"/>文字 
</label> 
<label> 
<input type="radio" name="prob5" value="C" />父母般地关心学生的生活和情绪状态 
</label> 
</div> 
</div> 
<div class="Problem" id="6"> 
<li>6你认为怎样的老师是好老师?</li> 
<div class="Choices"> 
<label> 
<input type="radio" name="prob6" value="D" />和 
</label> 
<label> 
<input type="radio" name="prob6" value="A" />所 
</label> 
<label> 
<input type="radio" name="prob6" value="B" />严 
</label> 
<label> 
<input type="radio" name="prob6" value="C" />父 
</label> 
<label> 
<input type="radio" name="prob6" value="E" />和班的成绩班的成绩班的成绩班的成绩班的成绩 
</label> 
<label> 
<input type="radio" name="prob6" value="F" />所班的成绩班的成绩班的成绩 
</label> 
<label> 
<input type="radio" name="prob6" value="G" />严班的班的成绩班的成绩班的成绩班的成绩 
</label> 
<label> 
<input type="radio" name="prob6" value="H" />父 
</label> 
</div> 
</div> 
</ol> 
</form> 
</body> 
</html>

样式文件(CSS)
/* YahooUI CSS Reset */ 
body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,p,blockquote,th,td { padding: 0; margin: 0; } 
table { border-collapse: collapse; border-spacing: 0; } 
fieldset,img { border: 0; } 
address,caption,cite,code,dfn,em,strong,th,var { font-weight: normal; font-style: normal; } 
ol,ul { list-style: none; } 
caption,th { text-align: left; } 
h1,h2,h3,h4,h5,h6 { font-weight: normal; font-size: 100%; } 
q:before,q:after { content:''; } 
abbr,acronym { border: 0;} label { padding: 0; margin: 0; } 
/* My css */ 
.Choices { line-height: 150%; margin: 5px 0; } 
.Page { height: 500px; border: solid 1px gray; } 
#olThePaper, .Display { padding: 0; width: 500px; } 
/* NOTICE: the width of .Display and #olThePaper should be the SAME. */ 
.Display { float: left; } 
#divToolbar { height: 35px; } 
#divPrev, #divNext { float: left; width: 100px; height: 30px; border: solid 1px green; background-color: #999999; } 
#divPageInfo { float: left; width: 100px; height: 30px; } 
#divTimer { float: left; width: 500px; height: 30px; } 

/*for debugging... perhaps for non-IE only*/ 
/**label { outline: dotted 1px red; background-color: gray; }**/ 
/**div {outline: dashed 1px blue;}**/

下面是重点,TTestPaperProcessor.js:
/** 
* 
* @param {String} PaperOlId the id value of the ol tags indicating pages. 
* @param {String} ProblemClass the css class name for problem area. 
* @param {String} DescClass the css class name for description area. 
* @param {String} ChoicesClass the css class name for choices area. 
* @param {String} LeftPageId the id of the left page. 
* @param {String} RightPageId the id of the right page. 
* @author ExSystem<exsystemchina@gmail.com> 
*/ 
function TTestPaperProcessor(PaperOlId, ProblemClass, DescClass, ChoicesClass, LeftPageId, RightPageId) { 
this.FPaperOlId = PaperOlId; 
this.FProblemClass = ProblemClass; 
this.FDescClass = DescClass; 
this.FChoicesClass = ChoicesClass; 
this.FLeftPageId = LeftPageId; 
this.FRightPageId =RightPageId; 
$('#' + this.FLeftPageId).html(''); 
$('#' + this.FRightPageId).html(''); 
this._FormatProblemOptions(); 
this._DivideIntoPages(); 
this.setCurrPage(1); 
} TTestPaperProcessor.prototype = { 
FPaperOlId: '', //the id property of the ol tag contains the whole test paper. 
FProblemClass: '', //the css class name for problem area. 
FDescClass: '', //the css class name for description area. 
FChoicesClass: '', //the css class name for choices area. 
FLeftPageId: '', //the left page. 
FRightPageId: '', //the right page. 
CPageClass: 'Page', 
FIsDisplayTableSupported: null, //whether the browser is the EVIL M$IE6,7 that does not support display: table(-cell). 
FCurrPage: 0, //start from 1, 0 for no page has been displayed yet. 
FPageCount: 0, //page count. 
// /** 
// * Get external css stylesheet info. 
// * @param {String} Selector The selector in the css style sheet. 
// * @param {String} Property The property name. 
// * @return {String} The value of the property, or null for undefined property. 
// */ 
// _GetCssInfo: function(Selector, Property) { 
// var mCss = document.styleSheets[0].cssRules || document.styleSheets[0].rules; 
// for (var mIndex = 0; mIndex < mCss.length; ++mIndex) { 
// if (mCss[mIndex].selectorText.toLowerCase() == Selector) { 
// return mCss[mIndex].style[Property]; 
// } 
// } 
// return null; 
// }, 
/** 
* @return {Boolean} 
*/ 
_IsDisplayTableSupported: function() { 
if (this.FIsDisplayTableSupported != null) { 
return this.FIsDisplayTableSupported; 
} 
this.FIsDisplayTableSupported = !(jQuery.browser.msie && jQuery.browser.version < 8.0); 
return this.FIsDisplayTableSupported; 
}, 
/** 
* Formats radios and checkboxes for the Choices quiz. 
*/ 
_FormatProblemOptions: function() { 
var mThis = this; 
var mSelector = '.' + this.FProblemClass + ' .' + this.FChoicesClass; 
$(mSelector).each(function() { 
//Rearrange the options for each problem ordered by offsetWidth of the label tag. 
var mLabels = new Array(); 
mLabels = jQuery.makeArray($('label', this)); 
mLabels.sort(function(First, Second) { 
return $(Second).outerWidth(true) > $(First).outerWidth(true); 
}); 
$(mLabels).appendTo(this); 
//Layout the options into the appropreate form. 
var mSlots = -1; //Force to create a new row, inside the while() loop. 
var mSlotWidth = $(mSelector).width() / 4.0; 
var mCellSize = 0; 
if (mThis._IsDisplayTableSupported()) { 
while (mLabels.length > 0) { 
//alert($(mLabels[0]).outerWidth(true) + '::' + $(mLabels[0]).outerHeight(true) + '::' + $(mLabels[0]).html()); 
if (mSlots <= 0) { //If no empty slot, create a new row. 
mCurrRow = $('<div class="___table" style="display: table;"></div>'); 
mCurrRow.appendTo(this); 
mSlots = 4; 
mCellSize = 0; 
var mRealCellWidth = $(mLabels[0]).outerWidth(true); 
if (mRealCellWidth < mSlotWidth) { 
mCellSize = 1; 
} 
if (mRealCellWidth >= mSlotWidth && mRealCellWidth < mSlotWidth * 2) { 
mCellSize = 2; 
} 
if (mRealCellWidth >= mSlotWidth * 2) { 
mCellSize = 4; 
} 
} 
mSlots -= mCellSize; 
if (mSlots >= 0) { //If empty slots exists, put the cell into the row. 
mLabel = mLabels.shift(); 
$(mLabel).addClass('___cell'); 
$(mLabel).css('display', 'table-cell'); 
$(mLabel).appendTo(mCurrRow); 
} 
} 
$('.___table').each(function() { //Align all the tables and cells. 
$(this).css('width', '100%'); 
var mCellWidth = 100 / $('.___cell', this).length; 
$('.___cell', this).css('width', mCellWidth + '%'); 
}); 
} 
else { // for the evil M$IE6, use table, tr, td tags. 
while (mLabels.length > 0) { 
if (mSlots <= 0) { //If no empty slot, create a new row. 
mCurrRow = $('<table class="___table" cellspacing="0" cellpadding="0"></table>'); 
mRow = $('<tr></tr>'); 
mRow.appendTo(mCurrRow); 
mCurrRow.appendTo(this); 
mSlots = 4; 
mCellSize = 0; 
var mRealCellWidth = $(mLabels[0]).attr('offsetWidth'); 
//The EVIL IE only: 
//be sure to use this css reset: table { border-collapse: collapse; border-spacing: 0; } 
//otherwise, 2 lines will be occupied by some long problem options instead of 1. 
//or use this code instead: var mRealCellWidth = $(mLabels[0]).attr('offsetWidth') * 1.3; 
if (mRealCellWidth <= mSlotWidth) { 
mCellSize = 1; 
} 
if (mRealCellWidth > mSlotWidth && mRealCellWidth <= mSlotWidth * 2) { 
mCellSize = 2; 
} 
if (mRealCellWidth > mSlotWidth * 2) { 
mCellSize = 4; 
} 
} 
mSlots -= mCellSize; 
if (mSlots >= 0) { //If empty slots exists, put the cell into the row. 
mLabel = mLabels.shift(); 
mCell = $('<td class="___cell"></td>'); 
$(mLabel).appendTo(mCell); 
mCell.appendTo($('tr', mCurrRow)[0]); 
} 
} 
$('.___table').each(function() { //Align all the tables and cells. 
$(this).css('width', '100%'); 
var mCellWidth = 100 / $('tbody tr .___cell', this).length; 
$('tbody tr .___cell', this).css('width', mCellWidth + '%'); 
}); 
} 
}); 
}, 
/** 
* Create a new page, and add it to the paper. 
* @return {jQuery} the new page. 
*/ 
_CreateNewPage: function() { 
++this.FPageCount; 
mPage = $('<div class="' + this.CPageClass + '" id="___page_' + this.FPageCount + '"></div>'); 
mPage.appendTo($('#' + this.FPaperOlId)); 
return mPage; 
}, 
/** 
* 
* @param {Number} PageNumber 
* @return {jQuery} 
*/ 
_GetPage: function(PageNumber) { 
if (PageNumber < 1 || PageNumber > this.FPageCount) { 
throw new Error('invalid page number: ' + PageNumber + '.'); 
} 
return $('#___page_' + PageNumber); 
}, 
/** 
* 
*/ 
_DivideIntoPages: function() { 
var mProblems = $('.' + this.FProblemClass + ', .' + this.FDescClass); 
var mProblemsCount = mProblems.length; 
var mCurrPage = this._CreateNewPage(); 
//var mPageHeight = mCurrPage.attr('offsetHeight'); chrome: sometimes 0. safari: always 0, IF PUTTED IN $(window).ready(). 
var mPageHeight = mCurrPage.outerHeight(true); //the same as the code above. FIX: PUT IT INTO $(window).load(). 
var mUsedPageHeight = 0; 
for (var mCurrProblem = 0; mCurrProblem < mProblemsCount; ++mCurrProblem) { 
if (mUsedPageHeight + $(mProblems[mCurrProblem]).outerHeight(true) > mPageHeight) { 
mCurrPage.hide(); 
mCurrPage = this._CreateNewPage(); 
mPageHeight = mCurrPage.outerHeight(true); 
mUsedPageHeight = 0; 
} 
$(mProblems[mCurrProblem]).appendTo(mCurrPage); 
mUsedPageHeight += $(mProblems[mCurrProblem]).outerHeight(true); 
} 
mCurrPage.hide(); 
}, 
/** 
* Get the current page of the left side, started from 1. 
* @return {Number} The current page. 
*/ 
getCurrPage: function() { 
if (this.FPageCount == 0) { 
throw new Error('No page has been created yet.'); 
} 
return this.FCurrPage; 
}, 
/** 
* Trun to a specific page in the left side. 
* @param {Number} Value The page number. 
*/ 
setCurrPage: function(Value) { 
if (Value < 1 || Value > this.FPageCount) { 
throw new Error('No such page: ' + Value + '.'); 
} 
this.FCurrPage = parseInt(Value / 2) * 2 + 1; // to get an odd number. 
$('#' + this.FLeftPageId + ' .' + this.CPageClass).hide(); 
$('#' + this.FRightPageId + ' .' + this.CPageClass).hide(); 
if (this.FCurrPage >= 0) { 
$('#___page_' + this.FCurrPage).appendTo($('#' + this.FLeftPageId)); 
$('#___page_' + this.FCurrPage).show('fast'); 
if (this.FCurrPage < this.FPageCount) { 
++this.FCurrPage; 
$('#___page_' + this.FCurrPage).appendTo($('#' + this.FRightPageId)); 
$('#___page_' + this.FCurrPage).show('fast'); 
--this.FCurrPage; 
} 
} 
}, 
/** 
* @retrun {Number} 
*/ 
getPageCount: function() { 
return this.FPageCount; 
}, 
/** 
* 
*/ 
Prev: function() { 
this.setCurrPage(this.FCurrPage - 2); 
}, 
/** 
* 
*/ 
Next: function() { 
this.setCurrPage(this.FCurrPage + 2); 
} 
}; 
//client code goes here... 
$(window).load(function() { 
var obj = new TTestPaperProcessor('olThePaper', 'Problem', 'Desc', 'Choices', 'divLeft', 'divRight'); 
$('#divPrev').click(function() { 
try { 
obj.Prev(); 
$('#divPageInfo').text(obj.getCurrPage() + ' of ' + obj.getPageCount()); 
} 
catch (e) { 
alert('No such page!'); 
} 
}); 
$('#divNext').click(function() { 
try { 
obj.Next(); 
$('#divPageInfo').text(obj.getCurrPage() + ' of ' + obj.getPageCount()); 
} 
catch (e) { 
alert('No such page!'); 
} 
}); 
//USAGE: http://keith-wood.name/countdown.html 
function TimeUp() { 
$('#formPaper').submit(); 
} 
$('#divTimer').countdown({ 
until: '+90m', 
compact: true, 
format: 'HMS', 
description: '', 
onExpiry: TimeUp 
}); 
$('#divPageInfo').text(obj.getCurrPage() + ' of ' + obj.getPageCount()); 
});

嘿嘿,其实这是一个俺们学校一位博导老师的项目的一部分~~托给我做了。马上要出门了,回来放源文件下载,就可以看到效果了~~昨天回来太晚了,现在放出源代码文件下载:点击此处
/201007/yuanma/TestPaperProcessor.rar

Javascript 相关文章推荐
javascript globalStorage类代码
Jun 04 Javascript
javascript 自定义事件初探
Aug 21 Javascript
通过JS获取用户本地图片路径并显示的代码
Feb 16 Javascript
javascript基础知识大全 便于大家学习,也便于我自己查看
Aug 17 Javascript
刷新页面的几种方法小结(JS,ASP.NET)
Jan 07 Javascript
javascript中JSON对象与JSON字符串相互转换实例
Jul 11 Javascript
JavaScript判断是否是微信浏览器
Jun 13 Javascript
结合代码图文讲解JavaScript中的作用域与作用域链
Jul 05 Javascript
javascript中异常处理案例(推荐)
Oct 03 Javascript
Angular 利用路由跳转到指定页面的指定位置方法
Aug 31 Javascript
layui 动态设置checbox 选中状态的例子
Sep 02 Javascript
JQuery中DOM节点的操作与访问方法实例分析
Dec 23 jQuery
Date对象格式化函数代码
Jul 17 #Javascript
js下利用控制器载入对应脚本
Jul 17 #Javascript
js 纯数字不重复排列的另类方法
Jul 17 #Javascript
jQuery Autocomplete自动完成插件
Jul 17 #Javascript
一个js拖拽的效果类和dom-drag.js浅析
Jul 17 #Javascript
JavaScript 浏览器验证代码(来自discuz)
Jul 17 #Javascript
IE6,IE7下js动态加载图片不显示错误
Jul 17 #Javascript
You might like
10 个经典PHP函数
2013/10/17 PHP
JS 面向对象的5钟写法
2009/07/31 Javascript
在JavaScript中操作时间之getYear()方法的使用教程
2015/06/11 Javascript
Jquery技巧(必须掌握)
2016/03/16 Javascript
浅谈js的ajax的异步和同步请求的问题
2016/10/07 Javascript
Vue.js Ajax动态参数与列表显示实现方法
2016/10/20 Javascript
AngularJS实现DOM元素的显示与隐藏功能
2016/11/22 Javascript
bootstrap学习使用(导航条、下拉菜单、轮播、栅格布局等)
2016/12/01 Javascript
JavaScript装饰器函数(Decorator)实例详解
2017/03/30 Javascript
浅析Vue 生命周期
2018/06/21 Javascript
原生JS实现列表内容自动向上滚动效果
2019/05/22 Javascript
javascript异步处理与Jquery deferred对象用法总结
2019/06/04 jQuery
JS实现动态倒计时功能(天数、时、分、秒)
2019/12/12 Javascript
JavaScript实现拖拽功能
2020/02/11 Javascript
详解如何修改 node_modules 里的文件
2020/05/22 Javascript
微信小程序学习总结(三)条件、模板、文件引用实例分析
2020/06/04 Javascript
Openlayers实现图形绘制
2020/09/28 Javascript
vue render函数动态加载img的src路径操作
2020/10/26 Javascript
浅要分析Python程序与C程序的结合使用
2015/04/07 Python
python 简单的多线程链接实现代码
2016/08/28 Python
python 按照固定长度分割字符串的方法小结
2018/04/30 Python
对TensorFlow中的variables_to_restore函数详解
2018/07/30 Python
python实现动态创建类的方法分析
2019/06/25 Python
Python整数对象实现原理详解
2019/07/01 Python
python实现BP神经网络回归预测模型
2019/08/09 Python
DataFrame 数据合并实现(merge,join,concat)
2020/06/14 Python
python interpolate插值实例
2020/07/06 Python
pycharm不以pytest方式运行,想要切换回普通模式运行的操作
2020/09/01 Python
详解如何解决canvas图片getImageData,toDataURL跨域问题
2018/09/17 HTML / CSS
html5手机键盘弹出收起的处理
2020/01/20 HTML / CSS
英国骑行、跑步、游泳、铁人三项运动装备专卖店:Wiggle
2016/08/23 全球购物
便携式太阳能系统的创新者:GOAL ZERO
2018/02/04 全球购物
运动会入场解说词
2014/02/07 职场文书
企业演讲比赛主持词
2014/03/18 职场文书
高中家长寄语
2014/04/02 职场文书
对Keras自带Loss Function的深入研究
2021/05/25 Python