ホームページ >ウェブフロントエンド >jsチュートリアル >1週間のjsヒント集_javascriptスキル

1週間のjsヒント集_javascriptスキル

WBOY
WBOYオリジナル
2016-05-16 18:30:15954ブラウズ
1. 今日はカスタム イベントについて話しましょう
イベントについては誰もが知っていますが、多くのフレームワークでカスタム イベントの実装が存在します。
コードをコピーします コードは次のとおりです。


var cusEvent = function(){ var キャッシュ = {};
return {
addEvent:function(type,fn){
cache[type]?cache[type].push(fn):(cache[type]= [fn] ]);
},
removeEvent:function(type,fn){
if(cache[type]){
if(fn){
for(var i=0 ,ci ;ci=cache[type][i];i ){
ci===fn&&cache[type].splice(i,1)
}
}else{
キャッシュを削除 [type] ];
}
}
}、
//e はカスタム オブジェクトまたは文字列です。
fire:function(e){
if( typeof e =='string '){
e = {type:e}
};
var t = キャッシュ[e.type]
if(t){
for( var i=0,ci ;ci=t[i];i ){
//e は独自のターゲットを持つことができますが、そうでない場合は代わりにこれを使用します
ci.call(e.target||this,e)
}
}
}
}
}()
//
cusEvent.addEvent('start',function(e){alert(e.type) })
を使用しますcusEvent.addEvent('start',function(e){alert(e.type "1")})
cusEvent.fire('start')
cusEvent.removeEvent('start' )
< ;/script>

2. 誰もが innerHTML を使用したことがありますが、IE では機能しない場合があります。もちろん、select の innerHTML は読み取り専用です。これに加えて、tr や table などの要素もあります。IE での innerHTML によるこれらの要素の使用と互換性があるようにするための小さなメソッドを書きました。インスピレーションを与えることができます

コードをコピー コードは次のとおりです:


無題 ;/head>

Hello World!


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


IE では、一時要素 div を使用して innerHTML をスキップしますが、それはできません。使用方法の問題については、さらにいくつかのロードポイントを記述することができます。つまり、渡されたものが tr または table であると判断された場合は、対応する要素でそれを適用します
この方法は、select でのオプションの追加と変更が難しいという問題も解決できます。
グローバル g-add 変数は、js では悪魔であるため、絶対に使用しないことをお勧めします。ただし、場合によっては、



Copy code

コードは次のとおりです:


var a = 1;
function fn(){ alert(a); fn() fn() 関数の実行で変更したい場合
こんな感じで書くと良いです




コードをコピーします

コードは次のとおりです:


<script> <br>var fn = function(){ <div class="codetitle">var a = 1; 🎜>return function(){ <span>alert(a); <a style="CURSOR: pointer" data="74760" class="copybut" id="copybut74760" onclick="doCopy('code74760')">}() <u>fn(); </u></script> a はクロージャとして内部関数からアクセスできますが、グローバル a は生成されません
もちろん、a を直接変更したい場合は、

もできます


コードをコピーします


コードは次のとおりです。


<script> <br>var fn = function(){ </div>var a = 1; <br>return function(p){ <br>a = p===未定義?a <br>alert(a); <div class="codetitle">fn(); <span></script>
4.
従来の方法は、el.offsetParent と el.offsetLeft をトラバースして
を取得することですが、実際には getBoundingClientRect を使用するのが最も簡単な方法です。
コードは次のとおりです
コードをコピー コードは次のとおりです:




無題




var offset = function (o){
var d = document,m = Math.max,bl = m(d.body. clientLeft,d. documentElement.clientLeft),st,sl,
bt = m(d.body.clientTop,d.documentElement.clientTop),b,bb = document.getElementById('bb'); function(o) {
b = o.getBoundingClientRect();
st = m(d.body.scrollTop,d.documentElement.scrollTop),sl = m(d.body.scrollLeft,d.documentElement.スクロール左);
bb.style.cssText =";top:" (b.top st-bt) 'px;left:' (b.left sl-bl) "px"; }()



下部の灰色の div をクリックすると、上の赤い div が灰色の div と完全に重なります
5. IE配下のOuterHTML Fat Sauceを使ったことはありますか? 特定の要素のHTMLを返すだけでなく、この要素のHTMLも返したい
ただし、この属性は使用できます。 IE では、この属性がありません。どうすればよいですか。




コードをコピーしてください。

コードは次のとおりです。 ></a></head> </span><div> " ksjfkls="sdf" > </div><p>sdf</p> <div class="codebody" id="code65146"><p djkfjd="df"></p> <br></div> <br><div id="bb" sdfksf= 333 > <br></div> <br></html> ><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>div.innerHTML = '' <br>var h = ''; .appendChild(o.cloneNode(true)); <br>return div.innerHTML <br>} <br>} <br>}() <br>alert(html('aa')) <br>alert(html) ('bb')) <br></script> <br><br> </div></span> </div></div><div class="nphpQianMsg"><div class="clear"></div></div><div class="nphpQianSheng"><span>声明:</span><div>この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。</div></div></div><div class="nphpSytBox"><span>前の記事:<a class="dBlack" title="Javascript 文字列拡張ライブラリ code_javascript スキル" href="https://m.php.cn/ja/faq/22198.html">Javascript 文字列拡張ライブラリ code_javascript スキル</a></span><span>次の記事:<a class="dBlack" title="Javascript 文字列拡張ライブラリ code_javascript スキル" href="https://m.php.cn/ja/faq/22200.html">Javascript 文字列拡張ライブラリ code_javascript スキル</a></span></div><div class="nphpSytBox2"><div class="nphpZbktTitle"><h2>関連記事</h2><em><a href="https://m.php.cn/ja/article.html" class="bBlack"><i>続きを見る</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="https://m.php.cn/ja/faq/1609.html" title="Bootstrap リスト グループ コンポーネントの詳細な分析" class="aBlack">Bootstrap リスト グループ コンポーネントの詳細な分析</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ja/faq/1640.html" title="JavaScript関数のカリー化の詳細説明" class="aBlack">JavaScript関数のカリー化の詳細説明</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ja/faq/1949.html" title="JS パスワードの生成と強度検出の完全な例 (デモ ソース コードのダウンロード付き)" class="aBlack">JS パスワードの生成と強度検出の完全な例 (デモ ソース コードのダウンロード付き)</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ja/faq/2248.html" title="Angularjs は WeChat UI (weui) を統合します" class="aBlack">Angularjs は WeChat UI (weui) を統合します</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ja/faq/2351.html" title="JavaScript を使用して繁体字中国語と簡体字中国語をすばやく切り替える方法と、簡体字中国語と繁体字中国語の切り替えをサポートする Web サイトのトリック_javascript スキル" class="aBlack">JavaScript を使用して繁体字中国語と簡体字中国語をすばやく切り替える方法と、簡体字中国語と繁体字中国語の切り替えをサポートする Web サイトのトリック_javascript スキル</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>福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!</p></div><div class="footermid"><a href="https://m.php.cn/ja/about/us.html">私たちについて</a><a href="https://m.php.cn/ja/about/disclaimer.html">免責事項</a><a href="https://m.php.cn/ja/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><!-- Matomo --><script> var _paq = window._paq = window._paq || []; /* tracker methods like "setCustomDimension" should be called before "trackPageView" */ _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); (function() { var u="https://tongji.php.cn/"; _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '9']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s); })(); </script><!-- End Matomo Code --></html>