<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>javascript &#8211; LPC影子技术分享</title>
	<atom:link href="https://www.mudbest.com/tag/javascript-2/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.mudbest.com</link>
	<description>行影不离,忘之却步.</description>
	<lastBuildDate>Thu, 24 Jan 2013 07:22:38 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.2</generator>
	<item>
		<title>Javascript的Attribute和setAttribute</title>
		<link>https://www.mudbest.com/javascript%e7%9a%84attribute%e5%92%8csetattribute/</link>
		
		<dc:creator><![CDATA[hkshadow]]></dc:creator>
		<pubDate>Thu, 24 Jan 2013 07:19:06 +0000</pubDate>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Attribute]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[setAttribute]]></category>
		<guid isPermaLink="false">http://www.mudbest.com/?p=1758</guid>

					<description><![CDATA[首先讲讲setAttribute，我们经常需要在JavaScript中给Element动态添加各种属性，这可以 ... <a title="Javascript的Attribute和setAttribute" class="read-more" href="https://www.mudbest.com/javascript%e7%9a%84attribute%e5%92%8csetattribute/" aria-label="阅读 Javascript的Attribute和setAttribute">阅读更多</a>]]></description>
										<content:encoded><![CDATA[<p>首先讲讲setAttribute，我们经常需要在JavaScript中给Element动态添加各种属性，这可以通过使用setAttribute()来实现，这就涉及到了浏览器的兼容性问题。</p>
<pre class="brush: jscript; title: ; notranslate">
setAttribute(string name, string value)：
</pre>
<p>//增加一个指定名称和值的新属性，或者把一个现有的属性设定为指定的值。</p>
<p>1、样式问题<br />
setAttribute(&#8220;class&#8221;, value)中class是指改变&#8221;class&#8221;这个属性，所以要带引号。<br />
vName代表对样式赋值。<span id="more-1758"></span><br />
例如:</p>
<pre class="brush: jscript; title: ; notranslate">
var input = document.createElement(&quot;input&quot;);
input.setAttribute(&quot;type&quot;, &quot;text&quot;);
input.setAttribute(&quot;name&quot;, &quot;q&quot;);
input.setAttribute(&quot;class&quot;,bordercss);
</pre>
<p>输出时： ,即，input控件具有bordercss样式属性<br />
注意：class属性在W3C DOM中扮演着很重要的角色，但由于浏览器差异性仍然存在。<br />
使用setAttribute(&#8220;class&#8221;, vName)语句动态设置Element的class属性在firefox中是行的通的，但在IE中却不行。因为使用IE内核的浏览器不认识&#8221;class&#8221;，要改用&#8221;className&#8221;；<br />
同样，firefox 也不认识&#8221;className&#8221;。所以常用的方法是二者兼备：</p>
<pre class="brush: jscript; title: ; notranslate">
element.setAttribute(&quot;class&quot;, value); //for firefox
element.setAttribute(&quot;className&quot;, value); //for IE
</pre>
<p>2、方法属性等问题<br />
例如：<br />
var bar = document.getElementById(&#8220;testbt&#8221;);<br />
bar.setAttribute(&#8220;onclick&#8221;, &#8220;javascript:alert(&#8216;This is a test!&#8217;);&#8221;);<br />
这里利用setAttribute指定e的onclick属性，简单，很好理解。<br />
但是IE不支持，IE并不是不支持setAttribute这个函数，而是不支持用setAttribute设置某些属性，例如对象属性、集合属性、事件属性，也就是说用setAttribute设置style和onclick这些属性在IE中是行不通的。</p>
<p>为达到兼容各种浏览器的效果，可以用点符号法来设置Element的对象属性、集合属性和事件属性。</p>
<pre class="brush: jscript; title: ; notranslate">
document.getElementById(&quot;testbt&quot;).className = &quot;bordercss&quot;;
document.getElementById(&quot;testbt&quot;).style.cssText = &quot;color: #00f;&quot;;
document.getElementById(&quot;testbt&quot;).style.color = &quot;#00f&quot;;
document.getElementById(&quot;testbt&quot;).onclick= function () { alert(&quot;This is a test!&quot;); }
</pre>
<p>由此延伸的问题:</p>
<p>一个input的text,当将html赋值为某个div的innerHTML时,遇到一个现象,当在firefox下时(IE下不存在此问题),赋值后的innerHTML里不含有value,即当你在文本框输入内容后,<br />
你想将</p>
<pre class="brush: xml; title: ; notranslate">
&lt;input type=text name=input1 value=”aa”&gt;
</pre>
<p>赋值给div时,只会得到</p>
<pre class="brush: xml; title: ; notranslate">
&lt;input type=text name=input1&gt;
</pre>
<p>这里总是会将value清除.</p>
<p>这时,setAttribute起作用了,在input内加上:onkeyup=&#8221;this.setAttribute(&#8216;value&#8217;,this.value)&#8221;,即动态的将input控件加上value值,这时再将文本框赋值给div,value将不会被清空.</p>
<p>而对于Attribute一般可用来获取属性的值，例如</p>
<pre class="brush: jscript; title: ; notranslate">
document.getElementById(&quot;testbt&quot;).Attribute&#x5B;'src'].value;
</pre>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>ControlJS简单应用介绍</title>
		<link>https://www.mudbest.com/controljs%e7%ae%80%e5%8d%95%e5%ba%94%e7%94%a8%e4%bb%8b%e7%bb%8d/</link>
					<comments>https://www.mudbest.com/controljs%e7%ae%80%e5%8d%95%e5%ba%94%e7%94%a8%e4%bb%8b%e7%bb%8d/#comments</comments>
		
		<dc:creator><![CDATA[hkshadow]]></dc:creator>
		<pubDate>Fri, 16 Mar 2012 05:45:46 +0000</pubDate>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[ControlJS]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[js]]></category>
		<guid isPermaLink="false">http://www.mudbest.com/?p=954</guid>

					<description><![CDATA[Steve Souders 最近做了这么一个东西—— ControllJs。 主要为了是解决网页加载中Js文件 ... <a title="ControlJS简单应用介绍" class="read-more" href="https://www.mudbest.com/controljs%e7%ae%80%e5%8d%95%e5%ba%94%e7%94%a8%e4%bb%8b%e7%bb%8d/" aria-label="阅读 ControlJS简单应用介绍">阅读更多</a>]]></description>
										<content:encoded><![CDATA[<p>Steve Souders 最近做了这么一个东西—— ControllJs。 主要为了是解决网页加载中Js文件的性能问题。这里做一个简单的转述。</p>
<p>众所周知，资源文件在浏览器加载直至用户可用是有两个阶段的：加载，执行。JavaScript的加载会阻滞其他资源的加载，而由于浏览器渲染是单线程的，JS执行的同时浏览器实际是假死状态的，页面渲染会停止，浏览器也不会下载新的文件。这样也会造成很大的性能问题， 所以Steve提出了三个方法：异步加载；延迟执行；覆写document.write。<br />
<strong><br />
1. 异步加载</strong><br />
核心思想还是很简单：让页面中的js片段对浏览器不可识别。jquery的template也是用了类似的方法。</p>
<p>外链脚本：由</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type=&quot;text/javascript&quot; src=&quot;main.js&quot;&gt;&lt;script&gt; 
</pre>
<p><span id="more-954"></span><br />
改写成</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type=&quot;text/cjs&quot; src=&quot;main.js&quot;&gt;&lt;script&gt; 
</pre>
<p>内联脚本：由</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type=&quot;text/javascript&quot;&gt;sth...&lt;script&gt;
</pre>
<p>改写成</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type=&quot;text/cjs&quot;&gt;sth...&lt;script&gt; 
</pre>
<p>这样子的type声明，浏览器是识别不了的，也不会去加载，更不会执行非ie浏览器不会加载，ie浏览器会加载这个文件，但所有都不会执行内部脚本。</p>
<p>接下来，对于外链的脚本，取出所有的src属性，通过Image或Object元素加载进页面（可参考css,javascript的预加载）。 这样加载的文件不会执行，节省了js的执行时间。</p>
<p>Gmail团队使用了另外一种方法，内联的js全部都放在/*&#8230;*/的注释中。也是可以参考的一种方法。</p>
<p>对于没有其他处理的脚本，ControlJS将在window.onload之后执行。对于外链重新创建一个正常的script运行，对于内联则直接eval。如果需要延迟，则需要采取下面的防范。</p>
<p><strong>2. 延迟执行</strong></p>
<p>正如前面说的，JS的执行也会带来大量性能问题。而据统计，一个页面只有29%的脚本是对于页面渲染，逻辑执行等有关系的，其余71%都是在页面加载之后执行，很多用户甚至都不会有机会执行他们。如果将这71%的脚本放在用户触发行为产生时才执行，将是对页面初期渲染性能多大的提升啊。</p>
<p>在ControlJs中，只需要简单做下面一步： </p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script cjsexec=false type=&quot;text/cjs&quot; cjssrc=&quot;jquery.min.js&quot;&gt;&lt;/script&gt;
</pre>
<p>声明一个cjsexec为false即可。到需要执行的时候，调用：</p>
<pre class="brush: jscript; title: ; notranslate">
CJS.execScript(&quot;fg.menu.js&quot;, createExamplesMenu);
</pre>
<p>即可。</p>
<p><strong>3. 重写document.write</strong></p>
<p>由于ControlJs会将所有脚本在window.onload之后执行。如果此时页面中有内联脚本执行document.write（广告等），将会自动执行window.open，所有的document.write的内容将取代现有页面的内容，这是不可接受的。</p>
<p>于是Steve重写了document.write，当调用时，会在script节点前自动创建一个span 标签，并把document.write的输出放到span里面去。这个能解决部分问题。</p>
<p>这里有个简单的DEMO：<br />
1. 引入 ControlJS</p>
<pre class="brush: jscript; title: ; notranslate">
var cjsscript = document.createElement('script');
cjsscript.src = &quot;control.js&quot;;
var cjssib = document.getElementsByTagName('script')&#x5B;0];
cjssib.parentNode.insertBefore(cjsscript, cjssib);
</pre>
<p>2. 修改外部脚本</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type=&quot;text/javascript&quot; src=&quot;main.js&quot;&gt;&lt;script&gt;
</pre>
<p>改为</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type=&quot;text/cjs&quot; data-cjssrc=&quot;main.js&quot;&gt;&lt;script&gt;
</pre>
<p>3. 修改 inline 脚本</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type=&quot;text/javascript&quot;&gt;
var name = getName();
&lt;script&gt;
</pre>
<p>改为 “text/cjs”, 如下所示：</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type=&quot;text/cjs&quot;&gt;
var name = getName();
&lt;script&gt;
</pre>
<p><strong>#ControlJS 包括了下面一些其他脚本加载程序没有的特点：</strong></p>
<p>    异步下载脚本<br />
    能同时处理外链和内联脚本<br />
    让脚本在页面加载完成之后才执行<br />
    支持脚本单纯下载但不执行<br />
    使用原生HTML<br />
    解决了部分document.write的问题<br />
    control.js自身加载是异步的 </p>
<p><strong>其他相关参考文档：</strong><br />
http://www.stevesouders.com/blog/2010/12/15/controljs-part-1/<br />
http://www.stevesouders.com/blog/2010/12/15/controljs-part-2/<br />
http://www.stevesouders.com/blog/2010/12/15/controljs-part-3/<br />
http://googlecode.blogspot.com/2009/09/gmail-for-mobile-html5-series-reducing.html （需翻墙）</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.mudbest.com/controljs%e7%ae%80%e5%8d%95%e5%ba%94%e7%94%a8%e4%bb%8b%e7%bb%8d/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>javascript简单实现选项卡</title>
		<link>https://www.mudbest.com/%e9%80%89%e9%a1%b9%e5%8d%a1javascript/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 18 Jan 2011 09:43:21 +0000</pubDate>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[选项卡]]></category>
		<guid isPermaLink="false">http://blog.mudbest.com/?p=308</guid>

					<description><![CDATA[javascript简单实现选项卡 JS： &#60;script type=&#34;text/javasc ... <a title="javascript简单实现选项卡" class="read-more" href="https://www.mudbest.com/%e9%80%89%e9%a1%b9%e5%8d%a1javascript/" aria-label="阅读 javascript简单实现选项卡">阅读更多</a>]]></description>
										<content:encoded><![CDATA[<p>javascript简单实现选项卡<span id="more-308"></span></p>
<p>JS：</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type=&quot;text/javascript&quot;&gt;
&lt;!--
function setTab(name,cursel,n)
{
for(i=1;i&lt;=n;i++)
{
var menu=document.getElementById(name+i);
if(menu)
{
var con=document.getElementById(&quot;con_&quot;+name+&quot;_&quot;+i);
menu.className= i==cursel?&quot;hover&quot;:&quot;&quot;;
con.style.display= i==cursel?&quot;block&quot;:&quot;none&quot;;
}
}
}
//--&gt;
&lt;/script&gt;﻿
</pre>
<p>HTML:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div id=&quot;menus&quot;&gt;
&lt;ul id=&quot;menu_navs&quot;&gt;
&lt;!--{loop $_G&#x5B;'setting']&#x5B;'u'] $nav}--&gt;
&lt;LI id=&quot;navsx{$nav&#x5B;'i']}&quot; onMouseOver=&quot;setTab('navsx',{$nav&#x5B;'i']},15)&quot;&gt;&lt;A id=wanggouhuisuo href=&quot;$nav&#x5B;url]&quot; target=&quot;_blank&quot; &gt;$nav&#x5B;name]&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;/LI&gt;
&lt;!--{/loop}--&gt;

&lt;/ul&gt;

&lt;div id=&quot;menu_cons&quot;&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;span style=&quot;float: left; line-height: 22px; color: rgb(244, 116, 35); margin-left: 12px;&quot;&gt;推荐栏：&lt;/span&gt;
&lt;!--{loop $_G&#x5B;'setting']&#x5B;'u1'] $k $nav1}--&gt;

&lt;!--{if $nav1&#x5B;val] == 1}--&gt;
&lt;UL style=&quot;DISPLAY: block&quot; id=&quot;con_navsx_$nav1&#x5B;val]&quot;&gt;
&lt;!--{else}--&gt;
&lt;UL style=&quot;DISPLAY: none&quot; id=&quot;con_navsx_$nav1&#x5B;val]&quot;&gt;
&lt;!--{/if}--&gt;
&lt;!--{loop  $nav1&#x5B;uk]  $nav2}--&gt;
&lt;LI&gt;&lt;A href=&quot;&lt;!--{$nav2&#x5B;url]}--&gt;&quot;  target=_blank&gt;&lt;SPAN&gt;&lt;!--{$nav2&#x5B;name]}--&gt;&lt;/SPAN&gt;&lt;/A&gt; &lt;/LI&gt;

&lt;!--{/loop}--&gt;
&lt;/UL&gt;
&lt;!--{/loop}--&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</pre>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
