在这篇文章开篇,我先纠正一下我之前写的一篇入门文章的错误,还是先引用一下比较官方的说法吧,避免再次误导各位新手
“
<!DOCTYPE> 声明必须位于 HTML5 文档中的第一行,也就是位于 <html> 标签之前。该标签告知浏览器文档所使用的 HTML 规范。
doctype 声明不属于 HTML 标签;tag; 它是一条指令,告诉浏览器编写页面所用的标记的版本。
在所有 HTML 文档中规定 doctype 是非常重要的,这样浏览器就能了解预期的文档类型。
HTML 4.01 中的 doctype 需要对 DTD 进行引用,因为 HTML 4.01 基于 SGML。而 HTML 5 不基于 SGML,因此不需要对 DTD 进行引用,但是需要 doctype 来规范浏览器的行为(让浏览器按照它们应该的方式来运行。)。
”
在 HTML 4.01 中有 3 个不同的文档类型,在 HTML 5 中只有一个:
<!DOCTYPE HTML>
因为HTML5 这个声明文档类型的标签是向下兼容的,所以即使你的html基本不使用HTML5的标签 ,你也可以使用这个声明方式,但是页面中会有某些不兼容的地方,这个就需要你根据实际情况来修正了。<!doctype html>可以让浏览器在严格模式(标准模式)下渲染页面,而不需要指定某个类型dtd。
再进入今天的主体:table和div 的合理应用
Table在早期的页面设计中应用广泛,但是随着互联网的发展table渐渐被抛弃,现在互联网上只有一小部分老站(有名气,不必要改的那种有很多),还是沿用着table来布局页面,现在的新站基本上都是使用了div+css来布局页面,但是很多web前端初入门的朋友就会产生一种错觉,认为table会是页面对搜索引擎不友好的元凶,所以在设计列表的时候总是会去使用dt ,ul 之类的标签。这样有的使用会让你多花很多设计页面样式的时间,而真正对搜索引擎优化的效果很微弱。
大量使用table的一个非常大的弊端除了对搜索引擎不友好,还有就是对程序员也非常的不友好,table的大量嵌套,会让人看的很晕。但是如果配合着div使用的话就会提供效果,达到的效果或许比dt,ul来的更加好。
还有一个问题就是大量的table tr td 会让你页面的语义非常的差,这里先不讨论标签语义化,大家自己去百度搜一下,语义良好的页面,搜索引擎是非常的喜好的,这里我先介绍一个语义化很好的网站 http://www.w3school.com.cn/ 大家也可以自己动手操作,用谷歌浏览器去掉它的css链接,然后再看它的页面布局,你会发现,它的所有的标题,列表,都井然有序,就像是写论文的时候非常正规的排版一样,即使不要样式表,相信大家也不会产生非常大的厌恶感,但是有些网站就不一样了,去掉css样式文件之后,页面直接就瘫了,这里再发个站www.webgamei.com 去掉它的css样式文件 (2个) 再看页面,因为它的样式很多都是直接写进table中的style中,所以你看起来没有很大的变化,但是你看导航部分,会发现,页面毫无语义感,若是页面的样式分离开了,那去掉css文件,估计没法看了。
所以这里建议,在你的页面设计出来之后,你可以先不去加css样式,直接先把默认样式的版面写出来,在根据页面去加css自定义样式,这样会不会更高效点呢 ,呵呵 ,我没试过,只是这么想而以。
关于语义的内容很多,这里我也不说太多了,介绍大家一本书 《编写高质量代码--Web前端开发修炼之道》很不错的一本书,里面对语义化介绍的很清楚。页面布局是一个经验积累的过程,看到好的网站,它的页面布局,你都可以借鉴一下,看到不好的,你也可以想一下该怎么去优化它,这样才能在web前端之路上成长更快。
写的不详尽之处还请web前辈指正,谢谢
本文链接
<h:commandLink
action="#mBean.delete}">
</h:commandLink>
选择某条数据点击上面的链接(或着用<h:commandButton>也行),执行服务器端delete操作,
成功后反回一URL来实现页面刷新。
另外还有一个方法就是利用<a4j:commandButton>或<a4j:commandLink>标签和render这个属性。
<h:form>
<a4j:commandButton render="refresh"
action="#mBean.delete}">
//可通过<a4j:param>设置参数
</a4j:commandButton>
<a4j:outputPanel id="refresh">
//需要刷新的页面代码
</a4j:outputPanel>
</h:form>
需要注意的是,<h:commandLink>和<h:commandButton>会导致整个页面刷新,而不是部分区域刷新,开发时可以多加尝试。
Js中使用正则的方法很多
一、String对象有四种使用正则表达式的方法:
(1)search 方法:返回与正则表达式查找内容匹配的第一个子字符串的位置(偏移位)。
stringObj.search(rgExp)
参数:
stringObj 必选项。要在其上进行查找的 String 对象或字符串文字。
rgExp 必选项。包含正则表达式模式和可用标志的正则表达式对象。
(2)replace 方法:返回根据正则表达式进行文字替换后的字符串的复制。
stringObj.replace(rgExp, replaceText)
参数:
stringObj 必选项。要执行该替换的 String 对象或字符串文字。该字符串不会被 replace 方法修改。
rgExp 必选项。为包含正则表达式模式或可用标志的正则表达式对象。也可以是 String 对象或文字。如果 rgExp 不是正则表达式对象,它将被转换为字符串,并进行精确的查找;不要尝试将字符串转化为正则表达式。
replaceText 必选项。是一个String 对象或字符串文字,对于stringObj 中每个匹配 rgExp 中的位置都用该对象所包含的文字加以替换。在 Jscript 5.5 或更新版本中,replaceText 参数也可以是返回替换文本的函数。 说明 replace 方法的结果是一个完成了指定替换的 stringObj 对象的复制。意思为匹配的项进行指定替换,其它不变作为StringObj的原样返回。 ECMAScript v3 规定,replace() 方法的参数 replacement 可以是函数而不是字符串。在这种情况下,每个匹配都调用该函数,它返回的字符串将作为替换文本使用。该函数的第一个参数是匹配模式的字符串。接下来的参数是与模式中的子表达式匹配的字符串,可以有 0 个或多个这样的参数。接下来的参数是一个整数,声明了匹配在 stringObject 中出现的位置。最后一个参数是 stringObject 本身。结果为将每一匹配的子字符串替换为函数调用的相应返回值的字符串值。函数作参可以进行更为复杂的操作。
(3)match 方法:使用正则表达式模式对字符串执行查找,并将包含查找的结果作为数组返回。
stringObj.match(rgExp)
参数:
stringObj必选项。对其进行查找的 String 对象或字符串文字。
rgExp必选项。为包含正则表达式模式和可用标志的正则表达式对象。也可以是包含正则表达式模式和可用标志的变量名或字符串文字。其余说明与exec一样,不同的是如果match的表达式匹配了全局标记g将出现所有匹配项,而不用循环,但所有匹配中不会包含子匹配项。
(4)split 方法:将一个字符串分割为子字符串,然后将结果作为字符串数组返回。
stringObj.split([separator[, limit]])
参数:
stringObj必选项。要被分解的 String 对象或文字。该对象不会被 split 方法修改。
separator可选项。字符串或 正则表达式 对象,它标识了分隔字符串时使用的是一个还是多个字符。如果忽略该选项,返回包含整个字符串的单一元素数组。
limit可选项。该值用来限制返回数组中的元素个数。
说明:split 方法的结果是一个字符串数组,在 stingObj 中每个出现 separator 的位置都要进行分解。separator 不作为任何数组元素的部分返回。
二、RegExp对象定义了两个用于模式匹配的方法,它们是exec()和test()
(1)exec 方法:用正则表达式模式在字符串中查找,并返回该查找结果的第一个值(数组),如果匹配失败,返回null。
rgExp.exec(str)
参数:
rgExp 必选项。包含正则表达式模式和可用标志的正则表达式对象。
str 必选项。要在其中执行查找的 String 对象或字符串文字。
返回数组包含: input:整个被查找的字符串的值;
index:匹配结果所在的位置(位);
lastInput:下一次匹配结果的位置;
arr:结果值,arr[0]全匹配结果,arr[1,2...]为表达式内()的子匹配,由左至右为1,2...。
(2)test 方法:返回一个 Boolean 值,它指出在被查找的字符串中是否匹配给出的正则表达式。
rgexp.test(str)
参数:
rgexp必选项。包含正则表达式模式或可用标志的正则表达式对象。
str必选项。要在其上测试查找的字符串。
说明:test 方法检查字符串是否与给出的正则表达式模式相匹配,如果是则返回 true,否则就返回 false。
本文链接