Skip to content

Instantly share code, notes, and snippets.

@smallnewer
smallnewer / canSetClassNameByAttr.js
Created September 16, 2013 04:28
判断浏览器是否存在该bug:IE中setAttribute设置className的bug.标准浏览器需要用'class'而IE需要用'className'
/*****
* 在标准浏览器中,设置标签的class可以使用两种方法:
* div.className='test';和div.setAttribute("class","test");
* 得到:
* <div class='test'></div>
* 但是大概由于class是关键字的缘由,在IE中处理策略不同:
* 需要用className来设置
* div.setAttribute("className","test");
* 得到:
* <div class='test'></div>
@smallnewer
smallnewer / equalArray.js
Last active August 1, 2018 16:31
判断复杂数据类型是否相等。在JS中判断两个对象、函数、数组等是否完全相等是很不方便的。 本例有自己的两个复杂数据类型判断的规则,不适合所有场景。 数组对比中,没有考虑排序问题,是否考虑,有待思考。 ====== 对象对比性能测试:(很卡很长时间) http://jsperf.com/equalobjecttest1 <br> ### result for-in应该比for性能要差,所以判断对象是否相等时,对象属性越多,越浪费时间。1000个属性的对象,一毫秒只能判断2-3个。100个属性的对象大概速度是6/ms 所以在MVC里面处理大数据还是不太实用的,一般的小场景用用无妨。 ### 结论 。。。
/**
* 判断两个数组是否相等
* 浅度相等:两数组toString一样
* 深度相等的判断规则:
* 1.长度相等
* 2.俩数组的每一项:
* 若为数组:参考本函数规则。
* 若为对象:参考equalObject的规则。
* 其他的数据类型,要求===判断为true
* @param {[type]} arr1
@smallnewer
smallnewer / deepClone.js
Last active December 22, 2015 21:28
深度克隆。自己写的一个简单的深度克隆,方便。
function deepClone (data) {
var result;
if (isType("Object",data)) {
// 如果是对象
result = {};
var keys = Object.keys(data);
for (var i = 0; i < keys.length; i++) {
var val = data[keys[i]];
@smallnewer
smallnewer / csshooks.js
Created September 12, 2013 03:15
CSS的相关操作,获取完整样式。 其中将100%,1em等相对单位换成精确PX代码值得一看 完整代码在:https://github.com/RubyLouvre/avalon/blob/master/avalon.js
//=============================css相关=======================
var cssHooks = avalon.cssHooks = {}
var prefixes = ['', '-webkit-', '-o-', '-moz-', '-ms-']
var cssMap = {
"float": 'cssFloat' in root.style ? 'cssFloat' : 'styleFloat',
background: "backgroundColor"
}
var cssNumber = oneObject("columnCount,order,fillOpacity,fontWeight,lineHeight,opacity,orphans,widows,zIndex,zoom")
function cssName(name, host, camelCase) {
@smallnewer
smallnewer / appendBuffer.js
Created September 12, 2013 02:48
链接两个buffer,类似数组的concat操作。实际操作的是两个Uint8Array。
/**
* Appends two ArrayBuffers into a new one.
*
* @param {ArrayBuffer} buffer1 The first buffer.
* @param {ArrayBuffer} buffer2 The second buffer.
*/
function appendBuffer(buffer1, buffer2) {
var tmp = new Uint8Array(buffer1.byteLength + buffer2.byteLength);
tmp.set( new Uint8Array(buffer1), 0);
tmp.set( new Uint8Array(buffer2), buffer1.byteLength);
@smallnewer
smallnewer / libmp3lame.js
Created September 11, 2013 10:46
libmp3lame.js。通过JS将WAV编码成MP3格式的库。从C的实现编译到JS版本的。使用了LLVM和Emscripten。
This file has been truncated, but you can view the full file.
// libmp3lame.js - port of libmp3lame to JavaScript using emscripten
// by Andreas Krennmair <[email protected]>
var Lame = (function() {
// Note: Some Emscripten settings will significantly limit the speed of the generated code.
// Note: Some Emscripten settings may limit the speed of the generated code.
try {
this['Module'] = Module;
} catch(e) {
@smallnewer
smallnewer / css3 3d cube.html
Created August 29, 2013 14:21
一个css3 做的常见css3立方体效果。 注:在IE10下,必须对6面div同时进行位移才行。而webkit等其他浏览器只需要移动一个父标签就行。
<html>
<head>
<title>3d</title>
<meta charset='utf-8' />
</head>
<body>
<div class="out">
<div class="perspective">
<div class="cube">
@smallnewer
smallnewer / index.js
Last active December 21, 2015 22:48
获取一个页面的正文区域,并进行格式化。nodejs版。从evernote的web版代码移植过来.
//
// need module:
// jquery \ jsdom \
//
(function () {
var $ = require('jquery').create();
$R = {};
$R.win = require('jsdom').jsdom().createWindow();
@smallnewer
smallnewer / getSpiderName.js
Created August 29, 2013 12:40
从字符串中匹配爬虫名字用到的正则。
// /\b([a-z]+?bot|[a-z]+?spider)\b/gi
@smallnewer
smallnewer / getAsFromHTML
Created August 29, 2013 12:37
用来匹配一段html字符串中的所有a标签,并提取其中的锚文本和链接。锚文本是将a标签其中的所有标签剔除,保留下来的文字。
function d(html){
var html = document.documentElement.innerHTML;
var aList = [];
// 匹配A标签
var reg=/\<a\s+[\d\D]*?href=['"]([^'"]*?)[\'|\"][^\>]*?\>([\d\D]*?)\<\/a\>/gi;
var res = null;
while((res = reg.exec(html)) != null){
// 匹配标签
var reg2 = /\<[\/]{0,1}[\w]+[^\>]*?\>/gi
aList.push({