我想用js检查网站地图文件里的网址是否都正确,于是找了js判断url是否能够访问的方法。原理是利用jQuery的ajax方法,根据网页状态码来判断网页能否打开。
//判断一个url是否可以访问 function IsLoad(_url){ $.ajax({ url:_url, type:"get", success:function(){ //说明请求的url存在,并且可以访问 console.log('请求的url可以访问'); }, statusCode:{ 404:function(){ //说明请求的url不存在 console.log('请求的url不可访问'); } } }); } //调用 IsLoad("http://www.saber.love/music/");
js判断url是否能够访问
下面代码是把js操作cookie的步骤封装成了函数,可以方便的调用。
//设置cookie,key,value,整数天数(自然天) function setCookie(name, value,days) { var exp = new Date(); exp.setTime(exp.getTime() + days * 24 * 60 * 60 * 1000); document.cookie = name + "=" + escape(value) + ";expires=" + exp.toGMTString()+ ";path=/"; } setCookie("volume",0.5,365); //其实这里面少了个domain参数,有时候会需要,如最后部分为 ";domain=.ikanman.com;path=/" //读取cookie function getCookie(name) { var arr = document.cookie.match(new RegExp("(^| )" + name + "=([^;]*)(;|$)")); if (arr != null) return unescape(arr[2]); return null; } getCookie("volume");
不过这个函数在设置cookie时没有做对域名的设置。
js设置和获取cookie的函数
这个html5音乐播放器是我花了一天时间琢磨出来的,因为好歹做了个像样的界面,所以版本姑且就叫1.0了。
使用了cookie来记住播放的音乐、音量和循环模式。没有做后台功能,例如评分、喜欢等。
使用网易云音乐的歌单做歌曲列表。
另外,音乐的缓冲进度条可能加载到中途就停止了,这个浏览器的行为,和本播放器无关。chrome经常会这样,火狐则是一口气加载完。如果有需要的话,浏览器会继续加载。
Read More →
saber酱の音乐播放器
p站会员过期了,无法直接按收藏数搜索了。普通用户看到的作品貌似是按时间排序的,这里面质量参差不齐,为了快速筛选高素质的作品,搞了下面这个小玩意,可以把收藏数低于指定标准的作品从页面中删除:
var wantNum=100; var allPicArea=$(".autopagerize_page_element .image-item"); for (var i = 0; i <allPicArea.length; i++) { if (allPicArea.eq(i).find("._ui-tooltip").length==0||allPicArea.eq(i).find("._ui-tooltip").eq(0).text()<wantNum) { allPicArea.eq(i).remove(); }; };
直接在控制台执行就可以,这个100用的时候自己改吧。
虽然使用了jQuery,但p站页面引用的有,我们不用自己再引用了。
ps:写的时候犯了低级错误,应该用find()的,用成了children(),还是用的太少了。
筛选pixiv搜索页面中的作品
昨天在做图的痛苦煎熬中,忽然脑子一抽想到了鼠标双击事件(看啊,我不得不思考代码以减轻做图的痛苦了。可见做图是多么惨无人道的事情)。于是鼓捣了两个玩意出来。
第一个代码是自定义鼠标双击事件。我们知道,JavaScript的鼠标双击事件(ondblclick)的判定时间是有阈值的。如果我们想自己定义,例如必须间隔在200毫秒以内才算双击,又比如想把时间间隔延长到1000毫秒。这时候可以自己设置时间阈值,满足条件就执行事件代码:
var click0=null;//第一次点击的时间戳 var clickTimeOut=500;//自定义允许的时间间隔 document.onclick=function () { var d=new Date(); if(click0==null){ click0=d.getTime(); }else{ if(d.getTime()-click0>clickTimeOut){ //console.log("不是双击"); click0=d.getTime(); }else{ console.log("一次双击"); click0=null;//初始化 } } }
这个和浏览器的判定应该是一样的了(至少从结果来看)。这也是数次修改之后的结果,改进的地方有(完全可以不看):
1.把相邻两次单击进行判断。例如鼠标点击了3次,第1次和第2次的间隔超时,第2次和第3次间隔在规定时间内。可以把第2和第3次点击识别为双击,而不是必须1、2判断一次,3、4再判断一次。
2.但是当一次双击事件触发之后,必须再进行至少两次单击才可以触发双击判定。例如3次单击间隔都在规定范围内,在把第1次和第2次识别为双击之后,不会把第3次和第2次连起来,认为又是一次双击。
Read More →
js自定义鼠标双击事件以及对其的一些思考
以JavaScript中的alert()函数为例,改变它的功能。
var _alert=window.alert; window.alert=function (s) { if (arguments[0].indexOf("萝莉")>=0) { _alert("快看 有小萝莉!"); }else{ _alert("没有萝莉,拒绝执行"); }; } alert("萝莉控"); alert("御姐控");
功能怎么改自然可以随意来,也可以改成压根就不弹。
javascript 函数劫持
<div class="rating" date-rating="4">四星:</div> <div class="rating" date-rating="2">二星:</div> <div class="rating" date-rating="3">三星:</div> <div class="rating" date-rating="0">零星:</div> <script type="text/javascript"> function getRating(rating) { if(rating > 5 || rating < 0) throw new Error('数字不在范围内'); return '★★★★★☆☆☆☆☆'.substring(5 - rating, 10 - rating ); } var ratingwrap=document.getElementsByClassName("rating"); for (var i = 0; i < ratingwrap.length; i++) { ratingwrap[i].innerHTML=getRating(ratingwrap[i].getAttribute("date-rating")); }; </script>
前几天在知乎上看到了一些巧妙的JavaScript代码,这个单独记录一下。设想满星5星的评分(也可以是10星,自己改代码),用js截取字符打印出评分。
我们一般的思路是先打印实心星星,然后补满空心星星。然而这个代码(getRating函数)把实心星星和空心星星放一起,一次截取完成。突破性的思维,令人不得不惊叹。
如果有半分制,又该怎么做呢?
嗯,似乎还找不到半实心半空心的五角星字符 ←_←
使用js打印评分
虽然也没什么卵用就是了。使用chrome的Tampermonkey扩展,新建脚本,作用域为“http://tieba.baidu.com/*”,首先在头部注释里引用keymaster.js:
// @require /f/keymaster.js
然后添加如下js代码:
key('alt+a', function(){ var _allList=document.getElementsByClassName("threadlist_detail"); if(_allList[0].style.display!="none"){ for (var i = 0; i < _allList.length; i++) { _allList[i].style.display="none"; }; }else{ for (var i = 0; i < _allList.length; i++) { _allList[i].style.display="block"; }; } return false; });
在页面中按快捷键alt+a(这个可以自己修改),可以隐藏/显示帖子摘要内容。
没什么技术含量的东西,不过一开始没想到用Tampermonkey来做,费了不少事,走了两次弯路←_←
隐藏百度贴吧帖子列表的摘要内容
今天要把许多网站的密码重新设置,所以自己写了个密码生成器。比较简陋,不过在简单的用途上应该算够用了。
您希望密码中包含哪些内容?
阿拉伯数字(0-9)
大写英文字母(A-Z)
小写英文字母(a-z)
特殊符号(键盘上除了\的所有输入符号)
请设置密码位数:
生成结果:
代码如下:
<p>您希望密码中包含哪些内容?</p> <input type="checkbox" name="pwType" value="Number"> 阿拉伯数字(0-9)<br> <input type="checkbox" name="pwType" value="Upper"> 大写英文字母(A-Z)<br> <input type="checkbox" name="pwType" value="Lower"> 小写英文字母(a-z)<br> <input type="checkbox" name="pwType" value="Punctuation"> 特殊符号(键盘上除了\的所有输入符号)<br><br> 请设置密码位数:<input type="text" name="pwLength" value="10"><br><br> 生成结果:<input type="text" name="outputPw" /><br><br> <button name="createPwButton">生成密码</button> <script type="text/javascript"> function createPW () { var allPw={ "Number":"0123456789", "Upper":"ABCDEFGHIJKLMNOPQRSTUVWXYZ", "Lower":"abcdefghijklmnopqrstuvwxyz", "Punctuation":"~!@#$%^&*()_+[]{}|`;:,./?><-=" } var allowPw=""; for (var i = 0; i < document.getElementsByName("pwType").length; i++) { if (document.getElementsByName("pwType")[i].checked) { allowPw+=allPw[document.getElementsByName("pwType")[i].value]; }; }; var pwLength=parseInt(document.getElementsByName("pwLength")[0].value,10); var pwResult=""; for (var i = 0; i < pwLength; i++) { var nowRandom=parseInt(Math.random()*allowPw.length,10); pwResult+=allowPw.substring(nowRandom, nowRandom+1); }; document.getElementsByName("outputPw")[0].value=pwResult; } document.getElementsByName("createPwButton")[0].onclick=function () { createPW(); } </script>