When using scripts that are shared between different areas of a site, there may be cases where a function is called that doesn’t exist. It makes sense on one page (the dependency is there) but not another. The difference is too slight to warrant forking the file into different versions. Instead, you can just check if the function exists before calling it to avoid the error:
分类目录归档:前端
AngularJs分页pagination directive
html
<div ng-app="hello"> <div ng-controller="pagingCtrl"> <paging> <table class="table table-striped table-bordered table-hover"> <tr> <th>id</th> <th>name</th> </tr> <tr ng-repeat="item in data"> <td>{{item.id}}</td> <td>{{item.name}}</td> </tr> </table> <ul class="pagination" num-pages="tasks.pageCount" current-page="tasks.currentPage" on-select-page="selectPage(page)"> <li ng-class="{disabled: noPrevious()}"> <a ng-click="selectPrevious()">«</a> </li> <li ng-repeat="page in pages" ng-class="{active: isActive(page)}"> <a ng-click="selectPage(page)">{{page}}</a> </li> <li ng-class="{disabled: noNext()}"> <a ng-click="selectNext()">»</a> </li> </ul> </paging> </div> </div>
js
var myModule = angular.module('hello', []);
myModule.controller('pagingCtrl', function ($scope, $http) {
$scope.data = [{
id: 1,
name: "a"
}, {
id: 2,
name: "b"
}];
$scope.currentPage = 1;
$scope.numPages = 5;
$scope.pageSize = 10;
$scope.pages = [];
//get first page
/*$http.get('url',
{
method: 'GET',
params: {
'pageNo': $scope.currentPage,
'pageSize': $scope.pageSize
},
responseType: "json"
}).then(function (result) {
$scope.data = result.data.Data;
$scope.numPages = Math.ceil(result.data.Total / result.data.PageSize);
});*/
$scope.onSelectPage = function (page) {
//replace your real data
/*$http.get('url',
{
method: 'GET',
params: {
'pageNo': page,
'pageSize': $scope.pageSize
},
responseType: "json"
}).then(function (result) {
$scope.data = result.data.Data;
$scope.numPages = Math.ceil(result.data.Total / result.data.PageSize);
});*/
};
});
myModule.directive('paging', function () {
return {
restrict: 'E',
//scope: {
// numPages: '=',
// currentPage: '=',
// onSelectPage: '&'
//},
template: '',
replace: true,
link: function (scope, element, attrs) {
scope.$watch('numPages', function (value) {
scope.pages = [];
for (var i = 1; i <= value; i++) {
scope.pages.push(i);
}
alert(scope.currentPage)
if (scope.currentPage > value) {
scope.selectPage(value);
}
});
scope.isActive = function (page) {
return scope.currentPage === page;
};
scope.selectPage = function (page) {
if (!scope.isActive(page)) {
scope.currentPage = page;
scope.onSelectPage(page);
}
};
scope.selectPrevious = function () {
if (!scope.noPrevious()) {
scope.selectPage(scope.currentPage - 1);
}
};
scope.selectNext = function () {
if (!scope.noNext()) {
scope.selectPage(scope.currentPage + 1);
}
};
scope.noPrevious = function () {
return scope.currentPage == 1;
};
scope.noNext = function () {
return scope.currentPage == scope.numPages;
};
}
};
});
jsfiddle
AngularJS的datepicker directive
JavaScript中setTimeout、setInterval避免使用eval()
定义和用法
setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式。
setTimeout(code,millisec)
//避免使用
setTimeout(“myFunc()”,1000);
//应该用的
setTimeout(myFunc,1000);
Set a default parameter value for a JavaScript function
javascript函数设置默认参数
C# datetime转换成JavaScript认识的UTC时间
TimeSpan span = DateTime.Now.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc));
Console.WriteLine(span.TotalMilliseconds);
输出:
1386928595163.35
在Json中查找 Javascript search inside a JSON object
var jsonObj ={"list": [
{"name":"my Name","id":12,"type":"car owner"},
{"name":"my Name2","id":13,"type":"car owner2"},
{"name":"my Name4","id":14,"type":"car owner3"},
{"name":"my Name4","id":15,"type":"car owner5"}
]};
var results = [];
var searchField = "name";
var searchVal = "my Name";
for (var i=0 ; i < jsonObj.list.length ; i++)
{
if (jsonObj.list[i][searchField] == searchVal) {
results.push(jsonObj.list[i]);
}
}
alert(results[0]["id"]);
关于CSS优先级的详细解说
在讲CSS优先级之前,我们得要了解什么是CSS,CSS是用来做什么的。简单说来,CSS是层叠样式表(Cascading Style Sheets)的简称。它的规范代表了互联网历史上一个独特的发展阶段。现在对于从事网页制作的朋友来说,应该很少没有听说过CSS了,因为在制作网页过程中我们经常需要用到。我们能通过CSS为文档设置丰富且易于修改的外观,以减轻网页制作者的工作负担,从而减轻制作及后期维护的代价。
其实现在还来讲CSS是什么,CSS有什么作用完全是多余的,相信从事网页制作的朋友都已经或多或少的接触过了。言归正传,开始进入今天的话题。
一、什么是CSS优先级?
所谓CSS优先级,即是指CSS样式在浏览器中被解析的先后顺序。
二、CSS优先级规则
既然样式有优先级,那么就会有一个规则来约定这个优先级,而这个“规则”就是本次所需要讲的重点。
样式表中的特殊性描述了不同规则的相对权重,它的基本规则是:
1、统计选择符中的ID属性个数。
2、统计选择符中的CLASS属性个数。
3、统计选择符中的HTML标记名个数。
最后,按正确的顺序写出三个数字,不要加空格或逗号,得到一个三位数(css2.1是用4位数表示)。( 注意,你需要把数字转换成一个以三个数字结尾的更大的数)。相应于选择符的最终数字列表可以很容易确定较高数字特性凌驾于较低数字的。
例如:
1、每个ID选择符(#someid),加 0,1,0,0。
2、每个class选择符(.someclass)、每个属性选择符(形如[attr=value]等)、每个伪类(形如:hover等)加0,0,1,0。
3、每个元素或伪元素(:firstchild)等,加0,0,0,1。
4、其它选择符包括全局选择符*,加0,0,0,0。相当于没加,不过这也是一种specificity,后面会解释。
三、特性分类的选择符列表
以下是一个按特性分类的选择符的列表:
单从上面这个表来看,貌似不大好理解,下面再给出一张表:
通过上面,就可以很简单的看出,HTML标记的权重是1,CLASS的权重是10,ID的权重是100,继承的权重为0(后面会讲到)。
按这些规则将数字符串逐位相加,就得到最终的权重,然后在比较取舍时按照从左到右的顺序逐位比较。
优先级问题其实就是一个冲突解决的问题,当同一个元素(内容)被CSS选择符选中时,就要按照优先级取舍不同的CSS规则,这其中涉及到的问题其实很多。
说到这里,我们不得不说一下CSS的继承性
四、CSS的继承性
4.1 继承的表现
继承是CSS的一个主要特征,它是依赖于祖先-后代的关系的。继承是一种机制,它允许样式不仅可以应用于某个特定的元素,还可以应用于它的后代。例如一个BODY定义了的颜色值也会应用到段落的文本中。
样式定义:
举例代码:
举例效果:
这段代码的应用结果是:“CSS继承性的测试”这段话是红颜色的,“继承性”几个字由于应用了标签,所以是粗体。很显然,这段文字都继承了由body {color:#f00;}样式定义的颜色。这也就是为什么说继承性是CSS的一部分。
然而CSS继承性的权重是非常低的,是比普通元素的权重还要低的0。
我们仍以上面的举例代码为例:在样式定义中添加一条:
举例效果:
发现只需要给加个颜色值就能覆盖掉它继承自的样式颜色。由此可见:任何显示申明的规则都可以覆盖其继承样式。
4.2 继承的局限性
继承是CSS重要的一部分,我们甚至不用去考虑它为什么能够这样,但CSS继承也是有限制的。
有一些属性不能被继承,如:border, margin, padding,?background等。
样式定义:
举例代码:
预期效果:
实际效果:
从上面的效果中,我们可以看出,border是不能被继承的,还有一些其它的属性也是如此,这里就不一一列举。
五、附加说明
1、文内的样式优先级为1,0,0,0,所以始终高于外部定义。这里文内样式指形如<div style=”color:red>blah</div>的样式,而外部定义指经由<link>或<style>卷标定义的规则。
2、有!important声明的规则高于一切。
3、如果!important声明冲突,则比较优先权。
4、如果优先权一样,则按照在源码中出现的顺序决定,后来者居上。
5、由继承而得到的样式没有specificity的计算,它低于一切其它规则(比如全局选择符*定义的规则)。
6、关于经由@import加载的外部样式,由于@import必须出现在所有其它规则定义之前(如不是,则浏览器应该忽略之),所以按照后来居上原则,一般优先权冲突时是占下风的。
还需要说一下,IE是可以识别位置错误的@import的,但无论@import在什么地方,它都认为是位于所有其它规则定义之前的,这可能会引发一些误会。
优先权问题看起来简单,但背后还是有非常复杂的机制,在实际应用中需要多多留意。
jQuery 选择器
jQuery 选择器
选择器 | 实例 | 选取 |
---|---|---|
* | $(“*”) | 所有元素 |
#id | $(“#lastname”) | id=”lastname” 的元素 |
.class | $(“.intro”) | 所有?class=”intro”?的元素 |
element | $(“p”) | 所有 <p> 元素 |
.class.class | $(“.intro.demo”) | 所有 ?class=”intro” 且?的元素 |
:first | $(“p:first”) | 第一个 <p> 元素 |
:last | $(“p:last”) | 最后一个 <p> 元素 |
:even | $(“tr:even”) | 所有偶数 <tr> 元素 |
:odd | $(“tr:odd”) | 所有奇数 <tr> 元素 |
:eq(index) | $(“ul li:eq(3)”) | 列表中的第四个元素(index 从 0 开始) |
:gt(no) | $(“ul li:gt(3)”) | 列出 index 大于 3 的元素 |
:lt(no) | $(“ul li:lt(3)”) | 列出 index 小于 3 的元素 |
:not(selector) | $(“input:not(:empty)”) | 所有不为空的 input 元素 |
:header | $(“:header”) | 所有标题元素 <h1> – <h6> |
:animated | 所有动画元素 | |
:contains(text) | $(“:contains(‘W3School’)”) | 包含指定字符串的所有元素 |
:empty | $(“:empty”) | 无子(元素)节点的所有元素 |
:hidden | $(“p:hidden”) | 所有隐藏的 <p> 元素 |
:visible | $(“table:visible”) | 所有可见的表格 |
s1,s2,s3 | $(“th,td,.intro”) | 所有带有匹配选择的元素 |
[attribute] | $(“[href]”) | 所有带有 href 属性的元素 |
[attribute=value] | $(“[href=’#’]”) | 所有 href 属性的值等于 “#” 的元素 |
[attribute!=value] | $(“[href!=’#’]”) | 所有 href 属性的值不等于 “#” 的元素 |
[attribute$=value] | $(“[href$=’.jpg’]”) | 所有 href 属性的值包含以 “.jpg” 结尾的元素 |
:input | $(“:input”) | 所有 <input> 元素 |
:text | $(“:text”) | 所有 type=”text” 的 <input> 元素 |
:password | $(“:password”) | 所有 type=”password” 的 <input> 元素 |
:radio | $(“:radio”) | 所有 type=”radio” 的 <input> 元素 |
:checkbox | $(“:checkbox”) | 所有 type=”checkbox” 的 <input> 元素 |
:submit | $(“:submit”) | 所有 type=”submit” 的 <input> 元素 |
:reset | $(“:reset”) | 所有 type=”reset” 的 <input> 元素 |
:button | $(“:button”) | 所有 type=”button” 的 <input> 元素 |
:image | $(“:image”) | 所有 type=”image” 的 <input> 元素 |
:file | $(“:file”) | 所有 type=”file” 的 <input> 元素 |
:enabled | $(“:enabled”) | 所有激活的 input 元素 |
:disabled | $(“:disabled”) | 所有禁用的 input 元素 |
:selected | $(“:selected”) | 所有被选取的 input 元素 |
:checked | $(“:checked”) | 所有被选中的 input 元素 |
参阅
js验证代码
1.JS判断是否是邮编
<script> function isPostalCode(s) { //var patrn=/^[a-zA-Z0-9]{3,12}$/; var patrn=/^[a-zA-Z0-9 ]{3,12}$/; if (!patrn.exec(s)) return false return true } var a = "315400"; alert(a+"是否合法!"); alert(isPostalCode(a)); a = "ab"; alert(a+"是否合法!"); alert(isPostalCode(a)); </script>
2.JS判断电话传真号码是否有效
<script> function isTel(s) { var patrn=/^[+]{0,1}(d){1,3}[ ]?([-]?((d)|[ ]){1,12})+$/; if (!patrn.exec(s)) return false return true } var a = "0574-56158888"; alert(a+"是否合法!"); alert(isTel(a)); a = "123456a"; alert(a+"是否合法!"); alert(isTel(a)); </script>
3.js正则判断:只能输入5-20个以字母开头、可带数字、“_”、“.”的字符串
<script> function isRegisterUserName(s) { var patrn=/^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){4,19}$/; if (!patrn.exec(s)) return false return true } var a = "abc"; alert(a+"是否合法!"); alert(isRegisterUserName(a)); a = "abcdef"; alert(a+"是否合法!"); alert(isRegisterUserName(a)); </script>
4.判断身份证号码的JS函数
<script type="text/javascript"> var aCity={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"} function cidInfo(sId) { var iSum=0 var info="" if(!/^d{17}(d|x)$/i.test(sId)) { return false; } sId=sId.replace(/x$/i,"a"); if(aCity[parseInt(sId.substr(0,2))]==null) { return false; } sBirthday=sId.substr(6,4)+"-"+Number(sId.substr(10,2))+"-"+Number(sId.substr(12,2)); var d=new Date(sBirthday.replace(/-/g,"/")) if(sBirthday!=(d.getFullYear()+"-"+ (d.getMonth()+1) + "-" + d.getDate())) { return false; } for(var i = 17;i>=0;i --) { iSum += (Math.pow(2,i) % 11) * parseInt(sId.charAt(17 - i),11) } if(iSum%11!=1) { return false; } return true; } alert(cidInfo("3432423432423432")); </script>
5.验证日期是否合法的JS函数
<script type="text/javascript"> function isDateFormat(txt){ //是否为合法的日期格式:YYYY-MM-DD if(txt==null || txt == ""){return false;} else{ var regex = /[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}/; if( regex.test(txt) ){ var noArr = txt.split("-"); var year = eval(noArr[0]); var month = eval(noArr[1]); var day = eval(noArr[2]); if ( year < 1 || month < 1 || month > 12 || day < 1 || day > 31) {return false;} if ((month == 4 || month == 6 || month == 9 || month == 11) && day > 30){return false;} if (month == 2){ if ((year % 4 != 0) && day > 29) { return false;} if (year % 4 == 0){ if(year % 100 == 0 && year % 400 != 0 && day > 29){return false;} else if (day > 28){ return false;} } } return true; }else{return false;} } } alert("2008-05-11是日期吗?答:"+isDateFormat("2008-05-11")); </script>
6.验证手机号码固定电话号码的JS函数
<script type="text/javascript"> function isPhoneNum(txt){ //检测是否为电话号码(固定电话或手机) return isPhone(txt)||isMobile(txt); } function isPhone(txt){//检测是否为固定电话号码 if(txt == null || txt == ""){return false;} else{ var regex = /[0-9]{1}[0-9]{2,3}-[1-9]{1}[0-9]{5,8}/; return regex.test(txt); } } function isMobile(txt){//检测是否为手机号码 if(txt == null || txt == ""){return false;} else{ var regex = /13[0-9]{9}/; return regex.test(txt); } } alert(isPhone("0574-56157573")); alert(isMobile("0574-56157574")); alert(isMobile("13956122541")); </script>
7.控制文本框输入长度的例子
<script> function test() { if(a.value.length>10){ alert("不能超过10个字符"); a.focus(); } else top.location.href="http://www.baidu.com"; } </script> <input type="text" name=a><input type="button" value="测试" onclick="test();">
8.JS判断中文的正则表达式
<script> function strChinese(str){ var pattern = /[^u4E00-u9FA5]/; return !pattern.test(str); } alert(strChinese("中文")) alert(strChinese("abc")) alert(strChinese("中文Abc")) </script>
9.验证email邮箱地址的js
<script type="text/javascript"> function isEmail(str){ res = /^[0-9a-zA-Z_-.]+@[0-9a-zA-Z_-]+(.[0-9a-zA-Z_-]+)*$/; var re = new RegExp(res); return !(str.match(re) == null); } alert(isEmail("abc.com")); alert(isEmail("")); </script>