Home  >  Article  >  Web Front-end  >  js tips one week collection_javascript skills

js tips one week collection_javascript skills

WBOY
WBOYOriginal
2016-05-16 18:30:15925browse
1. Let’s talk about custom events today
Everyone knows about events, but there are implementations of custom events in many frameworks. I wrote a simple one to share with you,
Copy code The code is as follows:

<script> <br>var cusEvent = function(){ <br>var cache = {}; <br>return { <br>addEvent:function(type,fn){ <br>cache[type]?cache[type].push(fn):(cache[type]= [fn]); <br>}, <br>removeEvent:function(type,fn){ <br>if(cache[type]){ <br>if(fn){ <br>for(var i=0 ,ci;ci=cache[type][i];i ){ <br>ci===fn&&cache[type].splice(i,1); <br>} <br>}else{ <br>delete cache [type]; <br>} <br>} <br>}, <br>//e can be a custom object or a string <br>fire:function(e){ <br>if( typeof e =='string'){ <br>e = {type:e} <br>}; <br>var t = cache[e.type]; <br>if(t){ <br>for( var i=0,ci;ci=t[i];i ){ <br>//e can have its own target, if not, use this instead <br>ci.call(e.target||this,e) <br>} <br>} <br>} <br>} <br>}() <br>//Use <br>cusEvent.addEvent('start',function(e){alert(e.type) }) <br>cusEvent.addEvent('start',function(e){alert(e.type "1")}) <br>cusEvent.fire('start') <br>cusEvent.removeEvent('start' ) <br></script>

2. Everyone has used innerHTML. It works well, but sometimes it doesn’t work under IE. For example, if you want to use option on select, just No, because the innerHTML of select is read-only. Of course, in addition to this, there are also elements such as tr, table, etc. I wrote a small method to be compatible with the use of these elements by innerHTML under IE. I hope it can give you some inspiration
Copy code The code is as follows:




Untitled


Hello World!




<script> <br>var html = function(){ <br>var div = document.createElement('div'); <br>return document.all?function(pN,h){ <br>div.innerHTML = '<select>' h '</select>'; <br>for(var i=0,ci;ci=pN.firstChild ;) pN.removeChild(ci) <br>debugger; <br>for(;ci=div.firstChild.firstChild;) pN.appendChild(ci); <br>}:function(pN,h){ <br> pN.innerHTML = h; <br>} <br>}() <br></script>

The principle is that in IE, I use a temporary element div to skip innerHTML and it cannot For the problem of usage, you can write some more load points, that is, if it is judged that the passed in is tr or table, then apply it with the corresponding elements.
This method can also solve the problem that it is difficult to add and modify the options in the select
3.
The global g-add variable is a devil in js, and it is absolutely recommended not to use it. However, sometimes, you may have to write a static variable, which accumulates as the function executes, such as
Copy code The code is as follows:

var a = 1;
function fn(){
alert( a);
}
fn()

fn()
If you want to change with the execution of the function
A good way to write it is like this
Copy code The code is as follows:

<script> <br>var fn = function(){ <br>var a = 1; <br>return function(){ <br>alert( a); <br>} <br>}() <br>fn(); <br>fn(); <br></script>

a, as a closure, can be accessed by internal functions, but it does not generate a global a
Of course, if you want to modify a directly, you can also
Copy code The code is as follows:

<script> <br>var fn = function(){ <br>var a = 1; <br>return function(p){ <br>a = p===undefined?a 1:p; <br>alert(a); <br>} <br>}() <br>fn (); <br>fn(0); <br></script>

4.
The traditional way is to traverse through el.offsetParent and el.offsetLeft to obtain
, but in fact the best and easier way is getBoundingClientRect
The code is as follows
Copy code The code is as follows:




Untitled





<script> <br>var offset = function (o){ <br>var d = document,m = Math.max,bl = m(d.body.clientLeft,d. documentElement.clientLeft),st,sl, <br>bt = m(d.body.clientTop,d.documentElement.clientTop),b,bb = document.getElementById('bb'); <br>return function(o) { <br>b = o.getBoundingClientRect(); <br>st = m(d.body.scrollTop,d.documentElement.scrollTop),sl = m(d.body.scrollLeft,d.documentElement.scrollLeft); <br>bb.style.cssText =";top:" (b.top st-bt) 'px;left:' (b.left sl-bl) "px"; <br>} <br>}() <br></script>

When you click on the gray div at the bottom, the red one above will completely overlap with the gray one
5.
OuterHTML under ie Have you ever used it? Fat Sauce is easy to use. You not only want to return the html under a certain element, but also want to return the html of this element
However, this attribute can only be used under IE. Other browsers do not have this attribute. , what to do,
js tips help you solve this problem
Copy the code The code is as follows:




Untitled< ;/title> <br></head> <br><body> <br><div > <br><div id="aa" ksjfkls="sdf" > <br><p>sdf</p> <br><p djkfjd="df"></p> <br></div> <br><div id="bb" sdfksf= 333 > <br></div> <br></div> <br></body> <br></html> <br><script> <br>var html = function( ){ <br>var d = document,div = d.createElement('div'); <br>return function(id){ <br>var o = d.getElementById(id); <br>if(o. outerHTML) <br>return o.outerHTML; <br>else{ <br>div.innerHTML = '' <br>var h = ''; <br>div.appendChild(o.cloneNode(true)); <br>return div.innerHTML <br>} <br>} <br>}() <br>alert(html('aa')) <br>alert(html('bb')) <br></script> ; <br> </div></div><div class="nphpQianMsg"><div class="clear"></div></div><div class="nphpQianSheng"><span>Statement:</span><div>The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn</div></div></div><div class="nphpSytBox"><span>Previous article:<a class="dBlack" title="Javascript string extension library code_javascript skills" href="http://m.php.cn/faq/22198.html">Javascript string extension library code_javascript skills</a></span><span>Next article:<a class="dBlack" title="Javascript string extension library code_javascript skills" href="http://m.php.cn/faq/22200.html">Javascript string extension library code_javascript skills</a></span></div><div class="nphpSytBox2"><div class="nphpZbktTitle"><h2>Related articles</h2><em><a href="http://m.php.cn/article.html" class="bBlack"><i>See more</i><b></b></a></em><div class="clear"></div></div><ins class="adsbygoogle" style="display:block" data-ad-format="fluid" data-ad-layout-key="-6t+ed+2i-1n-4w" data-ad-client="ca-pub-5902227090019525" data-ad-slot="8966999616"></ins><script> (adsbygoogle = window.adsbygoogle || []).push({}); </script><ul class="nphpXgwzList"><li><b></b><a href="http://m.php.cn/faq/1609.html" title="An in-depth analysis of the Bootstrap list group component" class="aBlack">An in-depth analysis of the Bootstrap list group component</a><div class="clear"></div></li><li><b></b><a href="http://m.php.cn/faq/1640.html" title="Detailed explanation of JavaScript function currying" class="aBlack">Detailed explanation of JavaScript function currying</a><div class="clear"></div></li><li><b></b><a href="http://m.php.cn/faq/1949.html" title="Complete example of JS password generation and strength detection (with demo source code download)" class="aBlack">Complete example of JS password generation and strength detection (with demo source code download)</a><div class="clear"></div></li><li><b></b><a href="http://m.php.cn/faq/2248.html" title="Angularjs integrates WeChat UI (weui)" class="aBlack">Angularjs integrates WeChat UI (weui)</a><div class="clear"></div></li><li><b></b><a href="http://m.php.cn/faq/2351.html" title="How to quickly switch between Traditional Chinese and Simplified Chinese with JavaScript and the trick for websites to support switching between Simplified and Traditional Chinese_javascript skills" class="aBlack">How to quickly switch between Traditional Chinese and Simplified Chinese with JavaScript and the trick for websites to support switching between Simplified and Traditional Chinese_javascript skills</a><div class="clear"></div></li></ul></div></div><ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-5902227090019525" data-ad-slot="5027754603"></ins><script> (adsbygoogle = window.adsbygoogle || []).push({}); </script><footer><div class="footer"><div class="footertop"><img src="/static/imghwm/logo.png" alt=""><p>Public welfare online PHP training,Help PHP learners grow quickly!</p></div><div class="footermid"><a href="http://m.php.cn/about/us.html">About us</a><a href="http://m.php.cn/about/disclaimer.html">Disclaimer</a><a href="http://m.php.cn/update/article_0_1.html">Sitemap</a></div><div class="footerbottom"><p> © php.cn All rights reserved </p></div></div></footer><script>isLogin = 0;</script><script type="text/javascript" src="/static/layui/layui.js"></script><script type="text/javascript" src="/static/js/global.js?4.9.47"></script></div><script src="https://vdse.bdstatic.com//search-video.v1.min.js"></script><link rel='stylesheet' id='_main-css' href='/static/css/viewer.min.css' type='text/css' media='all'/><script type='text/javascript' src='/static/js/viewer.min.js?1'></script><script type='text/javascript' src='/static/js/jquery-viewer.min.js'></script><script>jQuery.fn.wait = function (func, times, interval) { var _times = times || -1, //100次 _interval = interval || 20, //20毫秒每次 _self = this, _selector = this.selector, //选择器 _iIntervalID; //定时器id if( this.length ){ //如果已经获取到了,就直接执行函数 func && func.call(this); } else { _iIntervalID = setInterval(function() { if(!_times) { //是0就退出 clearInterval(_iIntervalID); } _times <= 0 || _times--; //如果是正数就 -- _self = $(_selector); //再次选择 if( _self.length ) { //判断是否取到 func && func.call(_self); clearInterval(_iIntervalID); } }, _interval); } return this; } $("table.syntaxhighlighter").wait(function() { $('table.syntaxhighlighter').append("<p class='cnblogs_code_footer'><span class='cnblogs_code_footer_icon'></span></p>"); }); $(document).on("click", ".cnblogs_code_footer",function(){ $(this).parents('table.syntaxhighlighter').css('display','inline-table');$(this).hide(); }); $('.nphpQianCont').viewer({navbar:true,title:false,toolbar:false,movable:false,viewed:function(){$('img').click(function(){$('.viewer-close').trigger('click');});}}); </script></body></html>