GOOD DAY

天天向上<< High一下!

前端技术

10 Nov 2016 - NanJing


jquery

//添加样式
$("#cpcode").removeAttr("disabled");
$("#cpcode").attr("disabled","");

$("#groupFiltera").css("visibility","hidden");
$("#groupFiltera").css("visibility","visible");

$().toggleClass("on")

$(".confirm").click(function() {
	$(".shade").hide();
	$(".change_content1").hide();
});

//$("#dataList tr[name='checkItem']:.trSelected")
var $checkBox = $("#dataList .trSelected");

//css选择器
#id
.class
.class1.class2{}
div p{}
.class2, class2{}

append() - 在被选元素的结尾插入内容
prepend() - 在被选元素的开头插入内容
after() - 在被选元素之后插入内容
before() - 在被选元素之前插入内容
html();
$("#dataList").empty();
$().remove()

//获取值
$("#tr").attr("data-prid");
$("#input").val();

//遍历
var $checkBox = $("#dataList tr[name='checkItem']:.trSelected");
var procIds = [];
$checkBox.each(function() {
	procIds.push($(this).attr("data-procid"));
});

//绑定事件
$("#modify").click(_redobd);
$(".confirm").click(function() {
	$(".shade").fadeOut(500);
	$(".pass_content").fadeOut(500);
	_resendcommit();
});
$("#bdtypecode").off('change').on('change',_bdservtypeChange);
$('.searchbar input').keypress(function (e) {
if (e.which == 13) {
		_queryData();
	}
});

//前端decode:内容选择器
$('td:contains(" 女 ")').css('background' , 'blue');
$('td:empty').html('无');
$("td:contains('0')[innerHTML='0']").removeAttr('name');
//精确匹配
var $option =$("td:contains('null')").map(function(){
	if ($(this).text() == "null") {
		return this;
	}
);
$option.html('空');

$("div span") div下所有span
$("div > span")div下直接子元素
$("div + p")匹配紧接在div元素后的第一个p元素,同级 
$("div ~ p")匹配紧接在div元素后的所有p元素 
$("p:not(.del)").css("color","red");
:even : 匹配偶数索引值的元素
:odd  : 匹配奇数索引值
:eq(index) : 匹配一个给定索引值的元素
:gt(index) : 匹配所有大于给定索引值的元素
$("div:has(p)").css("color","red");
$("div:parent").css("color","red");匹配含有子元素或者文本的元素,与empty相反
$("div[class!='myDiv']").css("color","red");
$("div[class^='my']").css("color","red");
[attribute$=value] : 匹配给定的属性是以某些值结尾的元素
[attribute*=value] : 匹配给定的属性是以包含某些值的元素

//显示 隐藏
fadeIn(500);
fadeOut(500);
show()
hide()
$("p").toggleClass("main");
$("p").toggle();
jQuery animate() 方法允许您创建自定义的动画。
slideDown()
slideUp()
slideToggle()
document.cookie="docName"+"="+($("input id='docName']").val()+";path=/");

CSS

	//css控制内容不超宽度
	td { 
		width:50px; 
		white-space:nowrap; 
	text-overflow:ellipsis; 
	overflow: hidden; 
}

	//遮罩
	.shade {
	display: none;
	width: 100%;
	height: 100%;
	position: fixed;
	top: 0;
	left: 0;
	background-color: #000;
	opacity: 0.6;
	filter: alpha(opacity=60);
	-ms-filter: "alpha(opacity=60)";
	z-index: 999;
	}

	//盒子模型
	//定位
div、h1 或 p 元素常常被称为块级元素。这意味着这些元素显示为
一块内容,即“块框”。与之相反,span 和 strong 等元素称为“行
内元素”,这是因为它们的内容显示在行中,即“行内框”。
CSS 有三种基本的定位机制:普通流、浮动和绝对定位。
除非专门指定,否则所有框都在普通流中定位。也就是说,普通流中
的元素的位置由元素在 (X)HTML 中的位置决定。
CSS position 属性:
static   relative absolute   fixed

css相对定位
绝对定位使元素的位置与文档流无关,因此不占据空间。这一点与相
对定位不同,相对定位实际上被看作普通流定位模型的一部分,因为
元素的位置相对于它在普通流中的位置。

css浮动
浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个
浮动框的边框为止。
由于浮动框不在文档的普通流中,所以文档的普通流中的块框表现得
就像浮动框不存在一样。

inline:块级元素转行内元素
block:1、隐藏元素显示2、转块级元素
inline-block:两者都包含

js数组

var colors = ["abc", "b", "d"];
for(var i = 0; i < arr.length; i++){//数组长度多长,就遍历多少次。  循环变量作为数组的下标
  console.log(arr[i]);
}
for (var index in arr) {
  console.log(num);  //循环输出: 0 1 2 3 4 5
}
//这里var 关键字也是可以省略的,但是不建议省略。
for(i in arr){
  console.log(arr[i]);
}

===数组转换===

  var arr = [50, 20, 10, 5, 15, 6];
  aalert(arr.toString());  //  50,20,10,5,15,6
  aalert(arr);  //  50,20,10,5,15,6   当把一个对象直接给aalert,则会调用这个对象的toString方法,然后再输出。

	var arr = [50, 20, 10, 5, 15, 6];
    aalert(arr.join(","));   //  50,20,10,5,15,6


===栈操作数组===

  var arr = ["张三", "李四", "王五"];
  //向栈中添加元素(最后添加的元素肯定在栈顶)   数组中的元素:"张三", "李四", "王五", "志玲"   
  var len = arr.push("志玲");   //push方法返回添加成功后的数组的长度
  aalert(len);  // 弹出:4
  arr.push("a", "b");  //也可以向在push方法中传入多个参数,这样每个参数都会添加到数组中。  栈顶元素是  "b"

  //pop出栈,一次只能出栈一个元素
  var item = arr.pop();  //把栈顶的元素从栈(数组)中移除。并返回移除的这个元素
  aalert(item); // 弹出:b

===队列操作数组===

  //把arr当做队列对待,那么 队列头部元素就是 "张三", 队尾元素就是 "王五"
  var arr = ["张三", "李四", "王五"];
  var firstItem = arr.shift();  //把队首元素从队列中移除,并返回移除的这个元素
  aalert(firstItem); //张三
  aalert(arr);  // 李四, 王五
  var len = arr.unshift("志玲");  //向队列头部添加元素,并返回添加成功后队列(数组)的长度
  aalert("数组长度:" + len);  // 数组长度:3
  aalert(arr);  // 志玲, 李四, 王五
  arr.unshift("a", "b");
  aalert(arr);  // a, b, 志玲, 李四, 王五

===js数组API===

//倒置  
    var arr = ["张三", "李四", "王五"];
    aalert("数组倒置前:" + arr); 
    //对数组元素进行倒置。
    arr.reverse();  
    aalert("数组倒置后:" + arr);  

//查找
    var arr = ["张三", "张三", "李四", "王五", "张三", "李四", "王五"];
    aalert(arr.indexOf("张三"));  // 0
    aalert(arr.lastIndexOf("张三"));  // 4

//合并
var newArray = arr1.contact(arrayX,arrayX,……,arrayX)

//截取 
    var arr1 = ["a", "b", "c", "d", "e", "f"];
    // 从下标为0的位置开始截取,截取到下标2,但是不包括下标为2的元素. 原数组没有任何的变化
    var newArr = arr1.slice(0, 2);
    aalert(newArr);// a, b
    aalert(arr1.slice(1, 4)); // b,c,d
    //从下标为2的元素开始截取,一直到最后一个元素
    aalert(arr1.slice(2));  //c,d,e,f
    //从倒数第5个元素,截取到倒数第2个
    aalert(arr1.slice(-5, -2)); // b c d

//删除    
    var arr1 = ["a", "b", "c", "d", "e", "f"];
    //因为第2个参数不为0,所以表示删除元素:从小标为1的位置开始删除,共删除2个元素。(2个中包括下标为1的元素)
    var deleted = arr1.splice(1, 2);    //返回值为删除的元素组成的数组
    //原数组
    aalert(arr1);  // a,d,e,f
    aalert(deleted); // b,c

//插入  
    var arr1 = ["a", "b", "c", "d", "e", "f"];
    //因为第2参数为0,所以表示添加元素:从下标为1的位置插入元素。其余的元素会自动向后移动
    var v = arr1.splice(1, 0, "m", "n");    // 因为是添加元素,所以返回的数组长度为 0
    aalert(v.length);  // 0
    aalert(arr1);    // a,m,n,b,c,d,e,f

//删除
  
    var arr1 = ["a", "b", "c", "d", "e", "f"];
    //因为第2个参数不为0,所以表示删除元素:从小标为1的位置开始删除,共删除2个元素。(2个中包括下标为1的元素)
    var deleted = arr1.splice(1, 2);    //返回值为删除的元素组成的数组
    //原数组
   aalert(arr1);  // a,d,e,f
   aalert(deleted); // b,c


//排序
function sortAsc(num1, num2){
	return num1 - num2;
}
var arr2 = [10, 8, 6, 20, 30, 15];
arr2.sort(sortAsc);

js对象

//http传参数
var o = {}; 
o.name = "Joey"; 
o.age = "27"; 
o.job = "ITE"; 

seajs模块化封装js

封装jquery

define(function () {

   //这里放置jquery代码 把你喜欢的jquery版本放进来就好了 


return $.noConflict();
});

引用:

define(function (require, exports, module) {
    var $ = require('./js/jquery');
  

   // $(document).ready(function () {
     //   $("tr").wyhinterlaced({ "odd": "red", "even": "blue" });
     //   $("tr").wyhhover();
   // })
});

自定义类封装:

define(function (require, exports, module) {

var $ = require("../js/jquery");


var weekday = new Array(7)
weekday[0] = "星期一";
weekday[1] = "星期二";
weekday[2] = "星期三";
weekday[3] = "星期四";
weekday[4] = "星期五";
weekday[5] = "星期六";
weekday[6] = "星期日";

function GetType(arg) {
...
}
exports.GetTime = GetTime;
})

调用:

define(function (require, exports, module) {
    var $ = require('./js/jquery');
    var a=require('./js/time');

    aalert(a.GetTime(3));
});

jquery插件模块化

define(function(require) { 

return function(jQuery) {
...
}//end of function

});

调用:

define(function (require, exports, module) {
    var $ = require('./js/jquery');
    require('./js/jquery_tr')($);//共享给jquery

    $(document).ready(function () {
        $("tr").wyhinterlaced({ "odd": "red", "even": "blue" });
        $("tr").wyhhover();
    })
});

前端优化

1、请求优化

2、资源优化

3、缓存

4、其他

高效的jQuery代码编写技巧总结

http://gcdn.gcpowertools.com.cn/showtopic-28514-1-3.html

// 糟糕
$element = $('#element');
h = $element.height();
$element.css('height',h-20);

// 建议
var $element = $('#element');
var h = $element.height();
$element.css('height',h-20);
// 糟糕
$first.click(function(){
$first.css('border','1px solid red');
$first.css('color','blue');
});

// 建议
$first.on('click',function(){
$first.css({
'border':'1px solid red',
'color':'blue'
});
});
// 糟糕
function initVar($myVar) {
if(!$myVar) {
$myVar = $('#selector');
}
}

// 建议
function initVar($myVar) {
$myVar = $myVar || $('#selector');
}
// 糟糕
if(collection.length 0){..}

// 建议
if(collection.length){..}
// 糟糕
$('#id').data(key,value);

// 建议 (高效)
$.data('#id',key,value);

前端面试

ajax 文件上传、下载

var form=$("<form>");//定义一个form表单
form.attr("style","display:none");
form.attr("target","");
form.attr("method","post");
form.attr("action","exportData");
var input1=$("<input>");
input1.attr("type","hidden");
input1.attr("name","exportData");
input1.attr("value",(new Date()).getMilliseconds());
$("body").append(form);//将表单放置在web中
form.append(input1);

form.submit();//表单提交 

安全

js脚本(公文自动审批)

$("[data-ibiz-tag=SBSY]").click();
setTimeout(function(){$(window.frames["layui-layer-iframe3"].document).find('.radio-inline')[1].click();
$(window.frames["layui-layer-iframe3"].document).find('.ibiz-id-menuitem')[2].click();
$(window.frames["layui-layer-iframe3"].document).find('#okbtn').click();},3000)

var data = [];
var timer = setInterval(function(){
if(data.length>1000){
console.log(data);
clearInterval(timer);
}
$(".programName").each(function(){data.push($(this).html())});
$('.nextPageBtn').click();
},3000);

data.join("|")

应用

行首添加字段
sed 's/^/HEAD/g' test.file
行末添加字段
sed -i 's/$/,"1234567890"/g' content.csv

去除重复
echo "获取第一列含id...";
cat contentOLD.csv | awk -F "," '{print $1}' > id1.csv;
cat contentNEW.csv | awk -F "," '{print $1}' > id2.csv;
echo "去重..."
sort id1.csv | uniq > id11.csv;
sort id2.csv | uniq > id22.csv;
echo "获得id1有的id2没有的..."
sort id11.csv id2.csv id22.csv | uniq -u > idminus.csv;
echo "done!"

juice

{@if item.spcount>=5}${item.spcount}{@else}${item.spcount}{@/if}

http://www.cnblogs.com/kuler/p/3802413.html