这些年,我收集的JavaScript代码(一)

一、取URL中的参数

function getParameterByName(name) {
    var match = RegExp('[?&]' + name + '=([^&]*)')
                    .exec(window.location.search);
    return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
}

二、正则分组

var testStr="<div><img src='/a.jpg' alt='' /><span>test</span><img src='/b.jpg' alt='' /><span>TTest</span><img src='/c.png' alt='' /></div>";
var reg=/<img\ssrc='(.*?)'\s+alt=''\s*\/>/g;
var match=reg.exec(testStr),results=[];
while(match != null){
    results.push(match[1]);
    match=reg.exec(testStr);
}
console.log(results);
/*
Array ["/a.jpg", "/b.jpg", "/c.png"]
*/

三、为什么parseInt(1/0,19)的结果为18

  1/0的结果是Infinity,所以parseInt(1/0,19)等同于parseInt(“Infinity”,19),而在19进制中:
  

19进制       10进制
--------------------
   0            0
   1            1
   2            2
   3            3
   4            4
   5            5
   6            6
   7            7
   8            8
   9            9
   a            10
   b            11
   c            12
   d            13
   e            14
   f             15
   g            16
   h            17
   i             18

i表示18,所以parseInt(1/0,19)的结果为18。

四、jQuery中获取设置checkbox选中状态

  由于在jQuery1.6以后.attr(“checked”)的返回结果是 checked,所以一般用下面两种方法获取选中状态:

$("#checkboxID").is(":checked");

//jQuery 1.6 +
$("#checkboxID").prop("checked");
  选中checkbox:

//jQuery 1.6+
$("#checkboxID").prop("checked", true);
$("#checkboxID").prop("checked", false);

//jQuery 1.5 and below
$('#checkboxID').attr('checked','checked')
$('#checkboxID').removeAttr('checked')

五、jQuery中判断一个元素是否存在

if ($(selector).length)

六、用JavaScript对URL进行编码

var myUrl = "http://example.com/index.html?param=1&anotherParam=2";
var myOtherUrl = "http://example.com/index.html?url=" + encodeURIComponent(myUrl);

七、jQuery中event.preventDefault() 与 return false 的区别

//Demo1 event.preventDefault()
$('a').click(function (e) {
    // custom handling here

    e.preventDefault();
});

//Demo2 return false
$('a').click(function () {
    // custom handling here

    return false;
};

jQuery中return false相当于同时调用e.preventDefault 和 e.stopPropagation。

  要注意的是,在原生js中,return false仅仅相当于调用了e.preventDefault。

八、JavaScript检查一个字符串是否为空最简单的方法

if (strValue) {
    //do something
}

``
九、用JavaScript添加和删除class

//Add Class
document.getElementById(“MyElement”).className += ” MyClass”;

//Remove Class
document.getElementById(“MyElement”).className = document.getElementById(“MyElement”).className.replace(/(?:^|\s)MyClass(?!\S)/,”);


十、在jQuery中取消一个ajax请求

var xhr = $.ajax({
type: “POST”,
url: “test.php”,
data: “name=test”,
success: function(msg){
alert( msg );
}
});

//取消请求
xhr.abort()

 要注意的是,在ajax请求未响应之前可以用xhr.abort()取消,但如果请求已经到达了服务器端,这样做的结果仅仅是让浏览器不再监听这个请求的响应,但服务器端仍然会进行处理。

十一、JavaScript删除数组中的项 delete vs splice

var myArray=[“a”,”b”,”c”];
delete myArray[0];
for(var i=0,j=myArray.length;i

 上面的代码已经说明区别了,一个是设置为undefined,一个是真正的删除了。

十二、JavaScript中16进制与10进制相互转换

var sHex=(255).toString(16);//ff
var iNum=parseInt(“ff”,16);//255


十三、JavaScript多行字符串

  如何在JavaScript中方便地写一个多行字符串呢,有三种方案,你自己选吧:

//one
var testHtml=”a”+
“b”+
“c”;

//two
var testHtml2=”a\
b\
c”;

//three
var testHtml3=[“a”,
“b”,
“c”].join(“”);

十四、JavaScript!!操作符是什么

十四、JavaScript中!!操作符是什么

console.log(!!10);//true
console.log(!!0);//false
console.log(!!”abc”);//true
console.log(!!”“);//false
  简单地说就是把右侧的值转为bool值

十五、JavaScript实现endsWith

String.prototype.endsWith = function(suffix) {
return this.indexOf(suffix, this.length - suffix.length) !== -1;
};

//or
function endsWith(str, suffix) {
return str.indexOf(suffix, str.length - suffix.length) !== -1;
}
十六、JavaScript中克隆对象

function clone(obj) {
// Handle the 3 simple types, and null or undefined
if (null == obj || “object” != typeof obj) return obj;

// Handle Date
if (obj instanceof Date) {
    var copy = new Date();
    copy.setTime(obj.getTime());
    return copy;
}

// Handle Array
if (obj instanceof Array) {
    var copy = [];
    for (var i = 0, var len = obj.length; i < len; ++i) {
        copy[i] = clone(obj[i]);
    }
    return copy;
}

// Handle Object
if (obj instanceof Object) {
    var copy = {};
    for (var attr in obj) {
        if (obj.hasOwnProperty(attr)) copy[attr] = clone(obj[attr]);
    }
    return copy;
}

throw new Error("Unable to copy obj! Its type isn't supported.");

}
十七、JavaScript字符与ASCII码间的转换

console.log(“\n”.charCodeAt(0));//10
console.log(String.fromCharCode(65));//A
十八、JavaScript中浮点数的相等判断不能用 ==

console.log(0.1+0.2 == 0.3);//false
console.log(Math.abs(0.1+0.2 - 0.3) < 0.000001);//true
  如上所示,浮点数相等判断要用差的绝对值小于某一个数来判断。至于原因可以参考这里:http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

十九、JavaScript中base64编码

var Base64 = {

// private property
_keyStr : “ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=”,

// public method for encoding
encode : function (input) {
var output = “”;
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
var i = 0;

input = Base64._utf8_encode(input);

while (i < input.length) {

    chr1 = input.charCodeAt(i++);
    chr2 = input.charCodeAt(i++);
    chr3 = input.charCodeAt(i++);

    enc1 = chr1 >> 2;
    enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
    enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
    enc4 = chr3 & 63;

    if (isNaN(chr2)) {
        enc3 = enc4 = 64;
    } else if (isNaN(chr3)) {
        enc4 = 64;
    }

    output = output +
    this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
    this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);

}

return output;

},

// public method for decoding
decode : function (input) {
var output = “”;
var chr1, chr2, chr3;
var enc1, enc2, enc3, enc4;
var i = 0;

input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");

while (i < input.length) {

    enc1 = this._keyStr.indexOf(input.charAt(i++));
    enc2 = this._keyStr.indexOf(input.charAt(i++));
    enc3 = this._keyStr.indexOf(input.charAt(i++));
    enc4 = this._keyStr.indexOf(input.charAt(i++));

    chr1 = (enc1 << 2) | (enc2 >> 4);
    chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
    chr3 = ((enc3 & 3) << 6) | enc4;

    output = output + String.fromCharCode(chr1);

    if (enc3 != 64) {
        output = output + String.fromCharCode(chr2);
    }
    if (enc4 != 64) {
        output = output + String.fromCharCode(chr3);
    }

}

output = Base64._utf8_decode(output);

return output;

},

// private method for UTF-8 encoding
_utf8_encode : function (string) {
string = string.replace(/\r\n/g,”\n”);
var utftext = “”;

for (var n = 0; n < string.length; n++) {

    var c = string.charCodeAt(n);

    if (c < 128) {
        utftext += String.fromCharCode(c);
    }
    else if((c > 127) && (c < 2048)) {
        utftext += String.fromCharCode((c >> 6) | 192);
        utftext += String.fromCharCode((c & 63) | 128);
    }
    else {
        utftext += String.fromCharCode((c >> 12) | 224);
        utftext += String.fromCharCode(((c >> 6) & 63) | 128);
        utftext += String.fromCharCode((c & 63) | 128);
    }

}

return utftext;

},

// private method for UTF-8 decoding
_utf8_decode : function (utftext) {
var string = “”;
var i = 0;
var c = c1 = c2 = 0;

while ( i < utftext.length ) {

    c = utftext.charCodeAt(i);

    if (c < 128) {
        string += String.fromCharCode(c);
        i++;
    }
    else if((c > 191) && (c < 224)) {
        c2 = utftext.charCodeAt(i+1);
        string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
        i += 2;
    }
    else {
        c2 = utftext.charCodeAt(i+1);
        c3 = utftext.charCodeAt(i+2);
        string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
        i += 3;
    }

}

return string;

}
}

//encode
Base64.encode(“Test”); //VGVzdA==

//decode
Base64.decode(“VGVzdA==”); // Test
二十、jQuery中each跟map的区别
  each跟map都可以用来遍历Array或Object,区别是each不改变原来的Array或Object,map是操作给定的Array或Object返回一个新Array或Object。Demo:

var items = [1,2,3,4];

$.each(items, function() {
alert(‘this is ’ + this);//alert 1,2,3,4
});

var newItems = $.map(items, function(i) {
return i + 1;
});
// newItems is [2,3,4,5]
  map会占用更多的内存,所以如果只是遍历建议用each。

二十一、判断一个对象是否为数组

function isArray(obj){
return Object.prototype.toString.call(obj) == “[object Array]”;
}
  不能用instanceof 和 constructor来判断,原因参考:http://perfectionkills.com/instanceof-considered-harmful-or-how-to-write-a-robust-isarray/

二十二、通过原型继承创建一个新对象

function inherit(p){
if(!p){
throw TypeError(“p is not an object or null”);
}
if(Object.create){
return Object.create(p);
}
var t=typeof p;
if(t !== “object” && t !== “function”){
throw TypeError(“p is not an object or null”);
}
function f(){};
f.prototype=p;
return new f();
}
“`

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 HTML+JavaScript 留言板代码: HTML 代码: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>留言板</title> </head> <body> <h1>留言板</h1> <form> <label for="name">姓名:</label> <input type="text" id="name" name="name"><br> <label for="message">留言:</label> <textarea id="message" name="message"></textarea><br> <input type="submit" value="提交" onclick="submitMessage()"> </form> <ul id="messageList"></ul> <script src="messageBoard.js"></script> </body> </html> ``` JavaScript 代码(保存在名为 messageBoard.js 的文件中): ```javascript // 定义一个空数组来存储留言 var messages = []; // 提交留言 function submitMessage() { // 获取表单中的数据 var name = document.getElementById("name").value; var message = document.getElementById("message").value; // 将数据添加到留言数组中 messages.push({name: name, message: message}); // 清空表单 document.getElementById("name").value = ""; document.getElementById("message").value = ""; // 更新留言列表 updateMessageList(); } // 更新留言列表 function updateMessageList() { var messageList = document.getElementById("messageList"); messageList.innerHTML = ""; // 遍历留言数组,将每个留言添加到列表中 for (var i = 0; i < messages.length; i++) { var li = document.createElement("li"); var name = document.createElement("span"); var message = document.createElement("span"); name.innerHTML = messages[i].name + ": "; message.innerHTML = messages[i].message; li.appendChild(name); li.appendChild(message); messageList.appendChild(li); } } ``` 这个留言板简单地使用了 HTML 表单来收集用户输入的姓名和留言,并将其存储在一个 JavaScript 数组中。在提交表单时,它调用 submitMessage() 函数来处理数据。这个函数将数据添加到留言数组中,并调用 updateMessageList() 函数来更新留言列表。最后,它清空表单以准备下一条留言。updateMessageList() 函数遍历留言数组,并将每个留言添加到一个 HTML 列表元素中,以显示在页面上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值