html判断IE版本

html判断IE版本
1.
除IE外都可识别
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Ite:less
than or equal to意思是小于或等于IE
6浏览器,用于IE浏览器的条件注释,常用于CSShack,针对IE的JS等。
在进行WEB标准网页的学习和应用过程中,网页对浏览器的兼容性是经常接触到的一个问题。其中因微软公司的Internet
Explorer(简称IE)占据浏览器市场的大半江山,此外还有Firefox、Opera等。需要对这些浏览器进行兼容。
同时,单就IE而言,因IE版本的升级更替,目前浏览者使用的主要停留在
IE
5(IE5.5)、IE6和IE7这三个版本中。而这3个版本对于我们制作的WEB标准网页(XHTML+CSS)解释执行的显示状况不尽相同。并
且,其他非IE浏览器与IE对某些CSS解释也不一样。所以,通过IE浏览器中的专有条件注释可有针对性的进行相关属性的定义。
条件注释只能用于Explorer
5+
Windows(以下简称IE)(条件注释从IE
5开始被支持)。如果你安装了多个IE,条件注释(Conditional
comments)将会以最高版本的IE为标准(目前为IE
7)。
条件注释只能在windows
Internet Explorer(以下简称IE)下使用,因此我们可以通过条件注释来为IE添加特别的指令。
通俗点,条件注释就是一些if判断,但这些判断不是在脚本里执行的,而是直接在html代码里执行的,比如:
 
1,条件注释的基本结构和HTML的注释()是一样的。因此IE以外的浏览器将会把它们看作是普通的注释而完全忽略它们。
2,IE将会根据if条件来判断是否如解析普通的页面内容一样解析条件注释里的内容。
3,条件注释使用的是HTML的注释结构,因此他们只能使用在HTML文件里,而不能在CSS文件中使用。
可使用如下代码检测当前IE浏览器的版本(注意:在非IE浏览器中是看不到效果的)
      
      
      
      
那如果当前的浏览器是IE,但版本比IE5还低,该怎么办呢,可以使用
"stylesheet"

type=
"text/css"

href=
"css.css"

/>
"stylesheet"

type=
"text/css"

href=
"ie7.css"

/>
"stylesheet"

type=
"text/css"

href=
"ie.css"

/>
 
这其中就区分了IE7和IE6向下的浏览器对CSS的执行,达到兼容的目的。同时,首行默认的css.css还能与其他非IE浏览器实现兼容。
注意:默认的CSS样式应该位于HTML文档的首行,进行条件注释判断的所有内容必须位于该默认样式之后。
比如如下代码,在IE浏览器下执行显示为红色,而在非IE浏览器下显示为黑色。如果把条件注释判断放在首行,则不能实现。该例题很能说明网页对IE浏览器和非IE浏览器间的兼容性问题解决。

同时,有人会试图使用

Java for linux Runtime 执行需要转义的脚本(shell)

最近写了一个利用java for  linux ffmpeg的音频转码服务,发现linux里能执行的脚本用java去执行就不行.普通脚本可以,但是遇到要使用文件名作为参数传递(文件名有空格)时就会提示文件找不到了. 我各种转义,\” \’ \[空格] 全试过了,都不行.   将java拼接出来转义后的shell字符串 命令直接复制到linux shell 终端就能执行. 用java Runtime.exec 就是不行. 后面还是被解决了.

假设有文件名参数/home/123   abc.txt  , 那程序就会去读/home/123,然后提示文件找不到.

我在shell终端测试发现,只需要给文件名套上引号就好了. 于是我在Java里面也打算拼接好字符串,加好应该加的空格. 结果发现拼出来的命令字符串和shell下手动输入的一模一样还是执行不了,找不到文件.  我将java生成打印出的命令复制直接shell执行没有任何问题! 那么问题来了. 下面是我犯错的地方.

原来错误重现如下:

1.部分配置文件:

#ffmpeg path 
ffmpeg_path = /home/audiotrans/bin/ffmpeg

#Transcoding parameters  #if#:inputFile  #of#:outputFile
trans_param_common = -i #if# -ab 256000 -ac 2 -ar 48000 #of#

2.代码实现

tips: inputFile 和 outputFile 是两个文件名(ffmpeg 转码用到的输入文件,输出文件参数)  param是获取配置文件中的trans_param_common 项

StringBuilder command = new StringBuilder(executePath);
String param = TranscodeConfig.getPropertyInTrans(paramType.toString());

command.append(” “);command.append(param.replace(“#if#”, “\””+inputFile+”\””).replace(“#of#”,”\””+outputFile+”\””));// 这部分代码用\” \’ \[空格]都转义过,执行都提示file not found


Runtime.getRuntime().exec(command.toString());   //省略部分标准输出,输入,error流处理代码 这里执行,提示文件找不到(No such file or directory)

解决实现:

1.部分配置文件

改了改去 也将 \” \’ \[空格]直接放到配置中,也还是不行. 最后改回了原样,也就是上面的那个配置

2.代码实现

String executePath = TranscodeConfig.getPropertyInTrans("ffmpeg_path");
String param = TranscodeConfig.getPropertyInTrans(paramType.toString());
List commands = new ArrayList();
commands.add(executePath);
// split param 
String[] params = param.split(" ");
for (String innerParam : params) {
// 如果帶有空格的文件名,直接放進去沒事
if ("#if#".equals(innerParam)) {
	innerParam = inputFile;
} else if ("#of#".equals(innerParam)) {
	innerParam = outputFile;
	}
	commands.add(innerParam);
}
Runtime.getRuntime().exec(commands.toArray(new String[commands.size()]));   // 这里执行的是exec重载方法,arrys:{"程序",参数0,参数1,参数2,参数..]

我用这个方法:public Process exec(String[] cmdarray)  throws IOException  的时候,空格没有做任何转义可以正常执行命令,转义反而是错的. 

到这里,问题解决了.   其实用java.lang.ProcessBuilder 类 也可以解决这个问题. Runtime底层也是用它实现的.  记录下,希望能帮助到别的小伙伴!

不要手动转义,直接用exec重载方法。

版权声明:本文为博主原创文章,未经博主允许不得转载。

gzip: stdin: not in gzip format tar: Child returned status 1

在linux下解压.tar.gz文件时,出现了:

  gzip: stdin: not in gzip format
  tar: Child returned status 1
  tar: Error exit delayed from previous errors 


 解决办法:

 tar -xf  filename.tar.gz

或者tar -xvf filename.tar.gz

都能够解压成功。

 下面是选项的含义:

 bz2格式用j
gz格式用z
c是创建
x是解压缩
v是详细信息
f是指定文件

 可以man tar查看。

eclipse 复制粘贴时总是很慢卡住了 ,解决办法

Eclipse/MyEclipse中使用复制粘贴功能卡的解决办法

最近在MyEclipse中编辑代码时,使用快捷键进行复制粘贴,经常会导致编辑器短暂的停顿,光标不跟随,居然反应不过来,几近假死。

想来想去应该是编辑上的什么配置或者是IDE的什么功能导致,于是进入Preferences查找edit功能,进行一个个的测试,最后发现原来是代码的超链功能导致。

 

进入方法:Window -> Preferences -> General -> Editors -> Text Editors -> Hyperlinking

把超链的快捷键改为其他键比如Alt(不能改为shift)

 

说明:在Eclipse中,经常可以使用Ctrl+鼠标单击,可以直接将编辑界面引导到相关的方法,属性,或者类。

这个功能确实非常好用,但是由于复制粘贴的功能快捷键也是Ctrl,以致我在快速进行操作的时候,Eclipse反应不过来,无法分析我的操作,现在只需要改变一个其他的快

http://liyanblog.cn/articles/2013/03/28/1364464592117.html

Xml:MalformedByteSequenceException: Invalid byte 2 of 2-byte UTF-8 sequence.

今天在解析XML出问题了,以前代码是没有问题的. 发现是客户接口那边多了些原来没有的字符导致的. 
com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 2 of 2-byte UTF-8 sequence.
	at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(UTF8Reader.java:687)
	at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(UTF8Reader.java:372)
	at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(XMLEntityScanner.java:1753)
	at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.scanLiteral(XMLEntityScanner.java:1074)
	at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanAttributeValue(XMLScanner.java:948)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanAttribute(XMLDocumentFragmentScannerImpl.java:1507)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1280)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2717)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:607)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:489)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:835)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123)
	at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:237)
	at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:300)
	at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:121)
	at javacommon.util.DomXmlParseUtils.getDocument(DomXmlParseUtils.java:53)
	at javacommon.util.DomXmlParseUtils.getNode(DomXmlParseUtils.java:63)
	at com.buyantech.qb.controller.QBController.convertRichText2SimpleText(QBController.java:444)
	at com.buyantech.qb.controller.QBController.remoteChildSystemInfoList(QBController.java:391)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)

导致的原因可能是:

1.如果是读取外部配置文件出现这个错误,可能是xml 声明为UTF-8格式,保存用的别的格式. 这样咱们在处理的时候,怎么看xml里面的格式都是对的,实际是文件保存的格式不对. 解决办法:另存为一致格式.

2.调用接口获取到的XML文档字符串,我们在将其转换成Java中Document时,调用xmlString.getBytes();  这里用的平台的默认字符集,如果有字符不支持也会报错. 

解决办法如下:

原异常代码:

ByteArrayInputStream bis = new ByteArrayInputStream(xmlContent.getBytes()); 
		return DOCUMENT_BUILDER.parse(bis);

解决:

ByteArrayInputStream bis = new ByteArrayInputStream(xmlContent.getBytes("UTF-8")); 
		return DOCUMENT_BUILDER.parse(bis);

记录下. 

版权声明:本文为博主原创文章,未经博主允许不得转载。

Jquery常用选择器

jQuery 的选择器可谓之强大无比,这里简单地总结一下常用的元素查找方法

$(“#myELement”)    选择id值等于myElement的元素,id值不能重复在文档中只能有一个id值是myElement所以得到的是唯一的元素 

$(“div”)           选择所有的div标签元素,返回div元素数组 

$(“.myClass”)      选择使用myClass类的css的所有元素 

$(“*”)             选择文档中的所有的元素,可以运用多种的选择方式进行联合选择:例如$(“#myELement,div,.myclass”)

 

层叠选择器: 

$(“form input”)         选择所有的form元素中的input元素 

$(“#main > *”)          选择id值为main的所有的子元素 

$(“label + input”)     选择所有的label元素的下一个input元素节点,经测试选择器返回的是label标签后面直接跟一个input标签的所有input标签元素 

$(“#prev ~ div”)       同胞选择器,该选择器返回的为id为prev的标签元素的所有的属于同一个父元素的div标签

 

基本过滤选择器:  

$(“tr:first”)               选择所有tr元素的第一个 

$(“tr:last”)                选择所有tr元素的最后一个 

$(“input:not(:checked) + span”)  

过滤掉:checked的选择器的所有的input元素

$(“tr:even”)               选择所有的tr元素的第0,2,4… …个元素(注意:因为所选择的多个元素时为数组,所以序号是从0开始)

$(“tr:odd”)                选择所有的tr元素的第1,3,5… …个元素 

$(“td:eq(2)”)             选择所有的td元素中序号为2的那个td元素 

$(“td:gt(4)”)             选择td元素中序号大于4的所有td元素 

$(“td:lt(4)”)              选择td元素中序号小于4的所有的td元素 

$(“:header”)            选择h1、h2、h3之类的

$(“div:animated”)     选择正在执行动画效果的元素

 

内容过滤选择器:

$(“div:contains(‘John’)”) 选择所有div中含有John文本的元素 

$(“td:empty”)           选择所有的为空(也不包括文本节点)的td元素的数组 

$(“div:has(p)”)        选择所有含有p标签的div元素 

$(“td:parent”)          选择所有的以td为父节点的元素数组 

 

可视化过滤选择器:

$(“div:hidden”)        选择所有的被hidden的div元素 

$(“div:visible”)        选择所有的可视化的div元素 

 

属性过滤选择器:

$(“div[id]”)              选择所有含有id属性的div元素 

$(“input[name=’newsletter’]”)    选择所有的name属性等于’newsletter’的input元素

$(“input[name!=’newsletter’]”) 选择所有的name属性不等于’newsletter’的input元素

$(“input[name^=’news’]”)         选择所有的name属性以’news’开头的input元素 

$(“input[name$=’news’]”)         选择所有的name属性以’news’结尾的input元素 

$(“input[name*=’man’]”)          选择所有的name属性包含’news’的input元素

$(“input[id][name$=’man’]”)    可以使用多个属性进行联合选择,该选择器是得到所有的含有id属性并且那么属性以man结尾的元素

 

子元素过滤选择器:

$(“ul li:nth-child(2)”),$(“ul li:nth-child(odd)”),$(“ul li:nth-child(3n + 1)”)

$(“div span:first-child”)          返回所有的div元素的第一个子节点的数组 

$(“div span:last-child”)           返回所有的div元素的最后一个节点的数组 

$(“div button:only-child”)       返回所有的div中只有唯一一个子节点的所有子节点的数组

 

表单元素选择器:

$(“:input”)                  选择所有的表单输入元素,包括input, textarea, select 和 button

$(“:text”)                     选择所有的text input元素 

$(“:password”)           选择所有的password input元素 

$(“:radio”)                   选择所有的radio input元素 

$(“:checkbox”)            选择所有的checkbox input元素 

$(“:submit”)               选择所有的submit input元素 

$(“:image”)                 选择所有的image input元素 

$(“:reset”)                   选择所有的reset input元素 

$(“:button”)                选择所有的button input元素 

$(“:file”)                     选择所有的file input元素 

$(“:hidden”)               选择所有类型为hidden的input元素或表单的隐藏域

 

表单元素过滤选择器:

$(“:enabled”)             选择所有的可操作的表单元素 

$(“:disabled”)            选择所有的不可操作的表单元素 

$(“:checked”)            选择所有的被checked的表单元素 

$(“select option:selected”) 选择所有的select 的子元素中被selected的元素

 

选取一个 name 为”S_03_22″的input text框的上一个td的text值

$(”input[@ name =S_03_22]“).parent().prev().text()

 

名字以”S_”开始,并且不是以”_R”结尾的

$(”input[@ name ^=’S_’]“).not(”[@ name $=’_R’]“)

 

一个名为 radio_01的radio所选的值

$(”input[@ name =radio_01][@checked]“).val();

 

$(“A B”) 查找A元素下面的所有子节点,包括非直接子节点

$(“A>B”) 查找A元素下面的直接子节点

$(“A+B”) 查找A元素后面的兄弟节点,包括非直接子节点

$(“A~B”) 查找A元素后面的兄弟节点,不包括非直接子节点

 

1. $(“A B”) 查找A元素下面的所有子节点,包括非直接子节点

例子:找到表单中所有的 input 元素

jQuery 代码:

$(“form input”) 

结果:

[ , ]

 

 

2. $(“A>B”) 查找A元素下面的直接子节点 

例子:匹配表单中所有的子级input元素。

 

jQuery 代码:

$(“form > input”) 

结果:

[ ]

 

3. $(“A+B”) 查找A元素后面的兄弟节点,包括非直接子节点 

例子:匹配所有跟在 label 后面的 input 元素

jQuery 代码:

$(“label + input”) 

结果:

[ , ]

 

4. $(“A~B”) 查找A元素后面的兄弟节点,不包括非直接子节点 

例子:找到所有与表单同辈的 input 元素

jQuery 代码:

$(“form ~ input”) 

结果:

[ ]

转载自:http://blog.csdn.net/a9529lty/article/details/6362180

java.lang.IllegalArgumentException: element is limited to 1 occurrence

错误为:
java.lang.IllegalArgumentException:  element is limited to 1 occurrence
	at org.apache.catalina.startup.SetSessionConfig.begin(WebRuleSet.java:718)
	at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1276)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:506)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1323)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2717)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:607)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:489)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:835)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1210)
	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:568)
	at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1537)
	at org.apache.catalina.startup.ContextConfig.parseWebXml(ContextConfig.java:1742)
	at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1174)
	at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:828)
	at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:302)
	at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
	at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5148)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1525)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1515)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
	at java.util.concurrent.FutureTask.run(FutureTask.java:166)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:724)


查找了半天,发现Tomcat 官网上面也有这个bug,但是一看人家提交bug时间是2011-06-21 01:36,几年过去了,肯定修复了. 
ctrl-f :  发现,web.xml里面存在多个. 删除只留一个就解决了. !   web.xml 从别的项目copy过来,忘记已经设置过了,导致的. 记录下

版权声明:本文为博主原创文章,未经博主允许不得转载。

修改linux主机名称

1、通过hostname命令。

命令格式:hostname newhostname

此命令的作用是暂时的修改linux的主机名,它的存活时间linux当前的运行时间,即在

重启前的运行时间内。一般修改以后就生效,但是不能永久修改

2、 通过配置文件/etc/sysconfig/network修改。

——————————————————–

# cat /etc/sysconfig/network

NETWORKING=yes

HOSTNAME=localhost.localdomain

——————————————————–

       通过修改此文件的内容,它能够实现永久修改linux的主机名,但是它不会立即生效,即有可能不在当前运行时间生效,即在从下次重启后才开始生效,至少是 不在当前session生效,需要用户退出以后才生效。通过修改此配置文件,再配合hostname命令,可实现立即永久修改linux的主机名。

3、文件/etc/hosts的功能

    这个文件的作用就是提供ip和主机名的对照作用,linux通过这个文件知道某个ip对应于某个主机名,如比方说google的ip是10.23.56.238,那么可以在这个文件的最后加上一行:

10.23.56.238   google.com

这个文件的一行对应一个对照,每行的格式是:

ip       全局主机名           主机名的别称

    当然这个文件可以把自己本机的主机名和ip放上去,有什么作用呢?因为有些软件是通过这个文件来实现主机名与ip的对应的,如oracle。这个文件对自 己本机的设置的功能,有点类似windows里面在我的电脑右击,然后属性,然后在计算机名里面设置主机名一样。