<?xml version="1.0" encoding="UTF-8"?><!-- generator="WordPress/2.5.1" -->
<rss version="0.92">
<channel>
	<title>javascript教程</title>
	<link>http://do-javascript.com</link>
	<description></description>
	<lastBuildDate>Fri, 22 Aug 2008 00:58:34 +0000</lastBuildDate>
	<docs>http://backend.userland.com/rss092</docs>
	<language>en</language>
	
	<item>
		<title>左侧固定宽度，右侧自适应宽度的CSS布局</title>
		<description>一边固定宽度，另一边根据浏览器窗口大小自动缩放宽度是这种很常用的布局。特别是在BS项目的界面设计中，几乎都会用到。BI上有高手专门讨论了这种布局方法，但他用了较多的hack，还回避了IE6的dtd。我在实际使用中，发现回避掉IE6的dtd定义后，会导致ajax模态框无法居中（VS的一个控件，自动生成的代码，很难修改）。 于是自己写了个简单的左右两列的布局，没用到什么hack，很简单，只是练手用用。


css代码：left和right都贴住左侧。设置left在right上面(z-index)；在right内加个放内容的层(content)；设置content距离right的左侧为200px，即刚巧等于left的宽度。

* {margin:0; padding:0; list-style:none; }
.wrapper {width: 100%;  }
.left {width:200px;background:#fcc; position:absolute; left:0 ;z-index:1  }
.right {width:100%;background:#ccc; position:absolute;left:0}
	.content {margin-left:200px;background:#ffc;   }



完整代码







* {margin:0; padding:0; list-style:none; }
.wrapper {width: 100%;  }
.left {width:200px; background:#fcc; position:absolute; left:0 ;z-index:1  }
.right {width:100%; background:#ccc; position:absolute; left:0}
	.content {margin-left:200px; background:#ffc;   }





	左侧固定宽度200px
	
		
			右侧宽度自动适应
		
	



 </description>
		<link>http://do-javascript.com/css/css-layout-0820</link>
			</item>
	<item>
		<title>BS项目中的CSS架构</title>
		<description>先说下这套架构的优点：

1.可以方便的把繁重的CSS编写工作分配出去，而不会相互造成影响。

2.结构清晰，利于维护和修改。

3.每一张网页都仅加载自己需要的CSS。

总结下来就是：提高开发效率，提高维护效率，提高网页加载效率。



下面我解释一下上面这张CSS结构图：

图中间的5个黑色的图示表示网页，其中上面单独的一张是母版页，下面四张是子页。使用VS的人都知道母版页的作用，相当于asp中的include，把共通的部分作成母版，单独的部分作成子页，提高开发效率。

图上方绿色框内的是全局CSS部分，它们存放在styles文件夹中，由母版调用并作用到所有子页。

图上方蓝色虚线框是单一CSS部分，其中每一张子页都有对应的文件夹用来存放自己独有的CSS文件。它们存放在styles/x文件夹中。 由各自对应的C#文件控制：打开不同的子页时，母版加载当前页的CSS。

图左下角的红色框是主题部分，用来存放全局的样式和图片。作用和绿色框一样，只不过它是由子页加载的，并不是母版统一加载的。 这部分和绿色框合并也无大碍。

接下来我介绍一下那么多CSS文件都有什么用？

---Adm/styles
------Basic.css 全局基础样式
------Layout.css 全局布局样式 （尺寸，定位等）
------General.css 全局美观样式 （颜色，图片等）
---Adm/styles/GroupManager 文件夹（例子）
------Group_Layout.css  group页特有的布局样式
------Group_General.css group页特有的美观样式

调用这么多CSS会带来较多的服务器请求，下面附上解决办法。

 </description>
		<link>http://do-javascript.com/css/css-framework-0807</link>
			</item>
	<item>
		<title>不同页面传值的改进版</title>
		<description>不同页面传值的老版本
改进点：支持同页面有多个文本框，可自动向不同的文本框传值。先看演示吧

其实原理也很简单。同样先通过getAttribute判断type属性，捕捉到按钮。然后在按钮onclick时把i通过url传入子页面。

input1

input2






子页面用slice方法对url进行切分。并使用window.opener方法捕捉到父页面的文本框，进行赋值。 一切就OK了

openWindow




还没明白的朋友看一下原理图就知道了
 </description>
		<link>http://do-javascript.com/javascript/window-opener-0807</link>
			</item>
	<item>
		<title>Firefox网页截屏扩展</title>
		<description>官方下载地址： http://screenshot-program.com/downloads.php

扩展名：Fireshot

支持Firefox3，同时也有IE版本。

专业版提供即时编辑功能，30天试用期。简装版没有编辑功能，但平时截个图也足够用了。



安装后会在状态栏上显示操作按钮。 左二的“半张纸”表示截取当前可视部分的网页，点一下后变成一整张纸，就可以截取完整的一张网页。

 </description>
		<link>http://do-javascript.com/uncategorized/firefox-screen-shot</link>
			</item>
	<item>
		<title>window.onload的页面加载</title>
		<description>大家仔细看下面两段代码，代码一的window.onload = doIt()函数后面有();而代码二的window.onload = doIt函数名后面没有括号。

把两段代码分别测试后发现不带括号的window.onload在页面加载后显示了正确的效果。 我想window.onload也相当于一个触发事件，如果函数加了括号那就直接先执行函数，再加载body。而不加括号，则相当于将一个函数当作变量赋值到window.onload上，并不立即加载。




代码一：




	
		window.onload = doIt();
		function doIt() {
				var oDiv = document.getElementById("div1");
			alert (oDiv);
		}
	


	




代码二：




	
		window.onload = doIt;
		function doIt() {
				var oDiv = document.getElementById("div1");
			alert (oDiv);
		}
	


	


 </description>
		<link>http://do-javascript.com/javascript/window-onload-doit</link>
			</item>
	<item>
		<title>javascript显示隐藏层</title>
		<description>

这是一个Q&#38;A的页面，设计师希望能够点击相关的问题后，在它下方显示对应的答案。这是一个比较常见功能，通常的解决办法是把“答案”当作整个问题容器的子元素，然后点击父元素上的按钮后展开对应的子元素。通过父子元素的对应关系来匹配标题和答案。

但是当初写html的时候并没有考虑到脚本编写（需求是后加的），所以，答案和标题没有父子关系可以对应。 html代码如下。

所以，这里需要用到另一种方法来匹配答案和标题。我们可以通过捕捉元素的位置来匹配它们。也就是说第一条标题，对应的肯定是整个序列中的第一条答案，第二条标题对应的肯定是第二条答案。 这样就可以无视html结构来控制它们的对应关系了。



	編號標題編輯者/發問者

	1想要開小店需要付費嗎? 客服
	
	現階段於策視其所以不收取任何費用，請使用者不用擔心。
	除了加值服務的功能模組之外。 客服

	2想要開小店需要付費嗎? 客服
	
	現階段於策視其所以不收取任何費用，請使用者不用擔心。
	除了加值服務的功能模組之外。 客服




脚本解释：当点击openLink这个图标时，显示和openLink在序列中位置相同的answer。这里需要将onclick事件放在闭包里面，等到for循环结束后才被激活。如果没有这层闭包，那不管点击哪个openLink，显示的都将是openLink.length的值。 

document.getElementsByClassName = function(eleClassName)
{
var getEleClass = [];//定义一个数组
var myclass = new RegExp("\\b"+eleClassName+"\\b");//创建一个正则表达式对像
var elem = this.getElementsByTagName("*");//获取文档里所有的元素
for(var h=0;h </description>
		<link>http://do-javascript.com/javascript/onclick-display-div</link>
			</item>
	<item>
		<title>针对Firefox区分所有IE的hack</title>
		<description>*:lang(ja) .a {color:red  !important;} //just for firefox
Firefox hack
*是通配符, 冒号后面跟的是lang伪类，IE（包括IE7）都不支持这个伪类。 注意要在html后面定义好语言，我这里定义的是ja（日文），中文的话是zh。 </description>
		<link>http://do-javascript.com/css/firefox-all-ie-hack</link>
			</item>
	<item>
		<title>select组合框option的捕捉</title>
		<description>

 
这是一份报名表单，要求用户在选中“专业人士访问员”和“定性访问员”后，分别显示“可提供被访者类型”和“容易接触到的行业”的对应表单。当呈未选中状态时，这2个框也对应的隐藏起来。


html部分


	报名参加的兼职职位(必填项)按住Ctrl键可多选
	
		入户访问员
		街访访问员
		街访拦截员
		电话访问员
		神秘顾客
		专业人士访问员
		企业深访员
		定性联络员
		主持人
		质量控制员
		数据录入员
	


	可提供被访者类型


	容易接触到的行业

 

javascript部分

option不能定义事件（我没试出来），所以事件要定义在select上。 这里使用的是onchange事件，onchange事件是当对象发生变化时触发，在这里用onchange比onclick合理许多，效果也好。
在调试这个脚本的时候，一开始我是用selectedIndex，试验多次发现selectedIndex在多选的情况下只能捕捉到第一个选中的选项，无法承担多选的工作。查了下参考书，才发现自己走了弯路。


var oListBox = document.getElementById("kc_selectjob");

oListBox.onchange = function showEasyVisitBox(){
	var oEasyvisitBox = document.getElementById("easyvisitBox");
	var oSupportvisitBox = document.getElementById("supportvisitBox");
	if (oListBox.options[5].selected)
	{
		oEasyvisitBox.style.display = "block";
	}
	else {
		oEasyvisitBox.style.display = "none";
	}

	if (oListBox.options[7].selected)
	{
		oSupportvisitBox.style.display = "block";
	}
	else {
		oSupportvisitBox.style.display = "none";
	}

}



演示地址 </description>
		<link>http://do-javascript.com/javascript/select-multiple-option</link>
			</item>
	<item>
		<title>Vdoing维度统计邀请</title>
		<description>

维度统计是界面很华丽的一款统计，不但包含了市面所有已经有的统计功能，还有许多新的特色功能。不过其中的资讯功能我很反感，显的很不专业。 这款统计目前正在内测，web界面还没开放，需要安装IM登陆（汗，统计还搞IM）。 需要内测邀请的朋友留下email，我会发给你邀请邮件。 </description>
		<link>http://do-javascript.com/uncategorized/vdoing</link>
			</item>
	<item>
		<title>URL的301重定向</title>
		<description>301重定向已经过很多次了，它可以将网站的主域名和二级域名规范到一个url上，使网页在搜索引擎里只能通过唯一的一个地址可以访问到，以免因重复内容造成降权。所以凡是使用linux的主机，我都会定义个301重定向，以利于SEO。昨天照例把htaccess传到服务器上，没想到传上后网站无法访问，一删除就恢复正常。看了很多遍代码，也没发现什么问题。 干脆就重新学习下URL重写方法。

 

规范化URL

描述：
在有些web服务器上，一个资源会拥有多个URL。在实际应用和发布中应该使用的是规范的URL，其他的则是简写或者只在内部使用。无论用户在请求中使用什么形式的URL，最终看见的都应该是规范的URL。
解决方案：
对所有不规范的URL执行一个外部HTTP重定向，以改变它在浏览器地址栏中的显示及其后继请求。下例中的规则集用规范的/u/user替换/~user，并修正了/u/user所遗漏的后缀斜杠。
RewriteRule ^/~([^/]+)/?(.*) /u/$1/$2 [R]
RewriteRule ^/([uge])/([^/]+)$ /$1/$2/ [R]



规范化主机名

描述：
这个规则的目的是强制使用特定的主机名以代替其他名字。比如，你想强制使用www.example.com代替example.com，就可以在以下方案的基础上进行修改：
解决方案：
对运行在非80端口的站点

RewriteCond %{HTTP_HOST} !^fully\.qualified\.domain\.name [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{SERVER_PORT} !^80$
RewriteRule ^/(.*) http://fully.qualified.domain.name:%{SERVER_PORT}/$1 [L,R]

对运行在80端口的站点

RewriteCond %{HTTP_HOST} !^fully\.qualified\.domain\.name [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^/(.*) http://fully.qualified.domain.name/$1 [L,R]

 

参考了上面的规则，发现自己原先的代码里少了个!号，加上就恢复正常了。
Options +FollowSymlinks
RewriteEngine on
RewriteCond %{HTTP_HOST} !^do-javascript.com [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^/(.*) http://www.do-javascript.com/$1 [r=301,nc] </description>
		<link>http://do-javascript.com/seo/url-301</link>
			</item>
</channel>
</rss>
