1.判读浏览器类别:
Browser = new Object(); Browser.isMozilla = (typeof document.implementation != 'undefined') && (typeof document.implementation.createDocument != 'undefined') && (typeof HTMLDocument != 'undefined')? true : false; Browser.isIE = window.ActiveXObject ? true : false; Browser.isOpera = navigator.userAgent.toLowerCase().indexOf('opera') != -1; Browser.isSafari = navigator.userAgent.toLowerCase().indexOf('safari') != -1; Broeser.isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') != -1;
另外一种方法:
<script type="text/javascript"> //jquery判断浏览器信息 $(function(){ var bro=$.browser;//获取浏览器用户代理信息; var bro_msie=bro.msie;//判断是否为ie浏览器,假如为ie浏览器就返回:true,否则返回:undefined; var bro_firefox=bro.mozilla;//判断是否为火狐浏览器;假如为火狐浏览器就返回:true,否则返回:undefined; var isChrome=window.navigator.userAgent.indexOf("Chrome")>0 ? 'true' : 'false' ;//判断chrome }); //原生javascript判断浏览器信息 // 判断浏览器是否为IE,方法1 var isIE=document.all ? 'IE' : 'others';//在IE下document.all值为1(true),而其他浏览器下的值为0(false); // 判断浏览器是否为IE,方法2 var bro=navigator.userAgent;//获取浏览器用户代理信息; var isIE2=bro.indexOf("MSIE")>0 ? 'IE' : 'others';//在IE下bro.indexOf("MSIE")值大于1,而其他浏览器下的值小于0(一般为-1); //JS获取浏览器信息 //浏览器代码名称:navigator.appCodeName //浏览器名称:navigator.appName //浏览器版本号:navigator.appVersion //对Java的支持:navigator.javaEnabled() //MIME类型(数组):navigator.mimeTypes //系统平台:navigator.platform //插件(数组):navigator.plugins //用户代理:navigator.userAgent </script>
2.由于浏览器不同,js中的获取class的方法重写如下:
function getElementsByClassName(n) { var classElements = [],allElements = document.getElementsByTagName('*'); for (var i=0; i< allElements.length; i++ ){ if (allElements[i].className == n ) { classElements[classElements.length] = allElements[i]; } } return classElements; }
传值给 js onclick='toinquiry(<s:property value="#product.productId"/>)'
3.关于lucene出现的错误Lock obtain timed out: NativeFSLock的解决方法:
原因:没有及时关闭indexWriter 或者是indexReader,注意大括号以及代码逻辑
代码:此方法用于关闭indexWriter
private void closeIndexWriter(IndexWriter writer) { if (writer != null) { try { writer.close(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (IndexWriter.isLocked(writer.getDirectory())) { try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } IndexWriter.unlock(writer.getDirectory()); } writer = null; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
此方法用于关闭indexReader
private void closeIndexReader(IndexReader reader) { if (reader != null) { try { reader.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
这二个方法需要放在外面,不然有可能在别的方法体内执行不了而没有关闭indexWriter
4.父类对象与子类对象的转化
对类进行造型转换的应参考以下原则: 1.总是可以“父=子”赋值。此时不需要类型转换。 2.可以执行类型转换“子=(子)父”,但需要运行时进行检查。如果父类变量引用的是正确的子类型,赋值将执行。如果父类变量引用的是不相关的子类型,将会生成class castException异常。 如Father father= new Father(); Child child = (Child)father ; 即:如果父类的实例是在子类的实例上塑造的,“子=(子)父”时就不会抛出异常。 如: A 是B的父类。 A a= new B(); //父类A的对象a是在子类B的对象上塑造的。 就可以: B b= (B)a; 3.决不能在不相关的任何类之间执行类的赋值或者类型转换。即类的造型转换仅限于有继承关系的俩个类的对象之间。
5.关于clear:both ;的理解和用法:
CSS手册上是这样说明的:该属性的值指出了不允许有浮动对象的边。这个属性是用来控制float属性在文档流的物理位置的。
当属性设置float(浮动)时,其所在的物理位置已经脱离文档流了,但是大多时候我们希望文档流能识别float(浮动),或者是希望float(浮动)后面的元素不被float(浮动)所影响,这个时候我们就需要用clear:both;来清除。
比如
<p style="float:left;200px;">这个是第1列,</p> <p style="float:right;400px;">这个是第2列,</p> <p>这个是第3列。</p>
清除浮动,让文档流识别前二个P标签,然后再继续第三个P标签,可以如下进行设计
<p style="float:left;200px;">这个是第1列,</p>
<p
style="float:left;400px;">这个是第2列,</p>
<div
class="clear"></div>
<p>这个是第3列。</p>
对于因多加的<div class="clear"></div>标签会引起IE和FF高度变化,通过如下方法解决:
.clear { clear: both; height:1px; margin-top:-1px; overflow:hidden; }