Mar
10

javascript相关应用(一)

记得大体是从去年做activex时,记录的一些资料.现放出来,供自己查用

一。检测对象是否可用
    本条内容由NeiLyi原创。保证其合法以及适用性
    1.检测顶级对象是否可用(如document)这内浏览器系统默认对象(主要是考虑不同浏览器的一些默认对象是否在其它上可用)
      语句:
          if(typeof(Test) == 'undefined' || typeof(Test) == null)
          {
              alert('test对象不存在');//注意Test为你要检测对象名,不要加引号
          }
     2.检测对象是否存在某个方法或者属性
         语句:
               注意:在检测方法时也不用加();而是方法名
         if(test.aaa)
          {
              alert('test对象存在aaa方法或者属性');
          }
          else
          {
          alert('test对象不存在aaa方法或者属性');
          }
      
      3.检测HTME中是否已经存在某个节点(或者这样说:检测doment是否已经存在某个对象)
         if(document.getElementById('aaa'))
         {
            alert('已经存在aaa此节点');
         }

二。常用节点操作方法
     对文档中的具体节点进行访问的方法:

document.getElementById()
返回对拥有指定 id 的第一个对象的引用。

document.getElementsByName()
返回带有指定名称的对象集合。 注意:Elements,有个s。

document.getElementsByTagName()
返回带有指定标签名的对象集合。注意:Elements,有个s。

生成节点的方法: 

createAttribute(name);
针对标签创建由字符串name指定的属性。 
myAlign=document.createAttribute("align");

createElement(tagName);
创建标签
myHeading = document.createElement("h1"); 

createTextNode(string); 
创建包含string的文本节点
newText = document.createTextNode("我是一段文字");

插入节点:

insertBefore(newChild,referenceChild) 
此方法可在已有的子结点前插入一个新的子结点。
newChild:插入新的节点
referenceChild:指定在哪个子节点前插入节点。

添加节点: 

appendChild(newChild)
此方法向已存在的节点添加子结点。新节点会添加(追加) 到任何已存在的子结点之后。

复制节点: 

cloneNode(true或false) 
此方法将创建指定节点的副本
参数(true或false)指定被复制的节点是否包括原节点的所有属性和子结点。

替换节点:

replaceChild(newChild,oldChild) 
此方法可将某个子结点替换为另一个。
newChild:指定新的节点。
oldChild:指定被替换的节点。 

删除节点: 

removeChild(node)
此方法可以从子结点列表中删除某个节点。
node:指定需要删除的节点。
注意:IE会忽略节点间生成的空白文本节点(例如,换行符号),而Mozilla不会这样做。在删除指定节点的时候不会出错,但是如果要删除最后一个子结点或者是第一个子结点的时候,就会出现问题。这时候,就需要用一个函数来判断首个子结点的节点类型。
  元素节点的节点类型是 1,因此如果首个子节点不是一个元素节点,它就会移至下一个节点,然后继续检查此节点是否为元素节点。整个过程会一直持续到首个元素子节点被找到为止。通过这个方法,我们就可以在 Internet Explorer 和 Mozilla 得到正确的方法。
详见这里:w3school

修改文本节点: 

appendDate(string)
将传递的字符串(string)附加到文本节点的结束出。

deleteDate(start,length) 
从start处开始删除length个字符。

insertDate(start,string) 
在start处插入字符,string为要插入的字符。start的开始值为0。

replaceDate(start,length,string) 
在start处用string字符串替换length个字符。

splitDate(offset) 
规定在offset处分割文本节点

substringDate(start,length) 
从start处提取length个字符。

对属性进行操作: 

getAttribute(name) 
此方法通过名称获取属性的值
name:从中获得属性值的属性

setAttribute(name,value) 
此方法创建或改变某个新属性
name:规定要设置的属性名。alue:规定要设置的属性值。
该方法把指定的属性设置为指定的值。如果不存在具有指定名称的属性,则该方法将创建一个新属性。

removeAttribute(name) 
此方法删除指定的属性。
name:要删除的属性的名称。
 


三.javascript的常用节点操作方法


appendChild(org.w3c.dom.Node):为这个节点添加一个子节点,并放在所有子节点的最后,如果这个子节点已经存在,则先把它删掉再添加进去。

getFirstChild():如果节点存在子节点,则返回第一个子节点,对等的,还有getLastChild()方法返回最后一个子节点。

getNextSibling():返回在DOM树中这个节点的下一个兄弟节点,对等的,还有getPreviousSibling()方法返回其前一个兄弟节点。

getNodeName():根据节点的类型返回节点的名称。

getNodeType():返回节点的类型。

getNodeValue():返回节点的值。

hasChildNodes():判断是不是存在有子节点。

hasAttributes():判断这个节点是否存在有属性。

getOwnerDocument():返回节点所处的Document对象。

insertBefore(org.w3c.dom.Node new,org.w3c.dom.Node ref):在给定的一个子对象前再插入一个子对象。

removeChild(org.w3c.dom.Node):删除给定的子节点对象。

replaceChild(org.w3c.dom.Node new,org.w3c.dom.Node old):用一个新的Node对象代替给定的子节点对象。

NodeList对象,顾名思义,就是代表了一个包含了一个或者多个Node的列表。可以简单的把它看成一个Node的数组,我们可以通过方法来获得列表中的元素:

GetLength():返回列表的长度。

Item(int):返回指定位置的Node对象。

Element对象代表的是XML文档中的标签元素,继承于Node,亦是Node的最主要的子对象。在标签中可以包含有属性,因而Element对象中有存取其属性的方法,而任何Node中定义的方法,也可以用在Element对象上面。

getElementsByTagName(String):返回一个NodeList对象,它包含了在这个标签中其下的子孙节点中具有给定标签名字的标签。

getTagName():返回一个代表这个标签名字的字符串。

getAttribute (String):返回标签中给定属性名称的属性的值。在这儿需要主要的是,应为XML文档中允许有实体属性出现,而这个方法对这些实体属性并不适用。这时候需要用到getAttributeNodes()方法来得到一个Attr对象来进行进一步的操作。

getAttributeNode(String):返回一个代表给定属性名称的Attr对象。

Attr 对象代表了某个标签中的属性。Attr继承于Node,但是因为Attr实际上是包含在Element中的,它并不能被看作是Element的子对象,因而在DOM中Attr并不是DOM树的一部分,所以Node中的getparentNode(),getpreviousSibling()和 getnextSibling()返回的都将是null。也就是说,Attr其实是被看作包含它的Element对象的一部分,它并不作为DOM树中单独的一个节点出现。这一点在使用的时候要同其它的Node子对象相区别。

需要说明的是,上面所说的DOM对象在DOM中都是用接口定义的,在定义的时候使用的是与具体语言无关的IDL语言来定义的。因而,DOM其实可以在任何面向对象的语言中实现,只要它实现了DOM所定义的接口和功能就可以了。同时,有些方法在DOM中并没有定义,是用IDL的属性来表达的,当被映射到具体的语言时,这些属性被映射为相应的方法。



四.js中innerHTML与innerText的用法与区别

用法:

<div id="test">
   <span style="color:red">test1</span> test2
</div>

在JS中可以使用:

test.innerHTML:

  也就是从对象的起始位置到终止位置的全部内容,包括Html标签。

  上例中的test.innerHTML的值也就是“<span style="color:red">test1</span> test2 ”。

test.innerText: 

  从起始位置到终止位置的内容, 但它去除Html标签 

  上例中的text.innerTest的值也就是“test1 test2”, 其中span标签去除了。

test.outerHTML:

  除了包含innerHTML的全部内容外, 还包含对象标签本身。

  上例中的text.outerHTML的值也就是<div id="test"><span style="color:red">test1</span> test2</div>


完整示例:

<div id="test">
   <span style="color:red">test1</span> test2
</div>

<a href="javascript:alert(test.innerHTML)">innerHTML内容</a>
<a href="javascript:alert(test.innerText)">inerHTML内容</a>
<a href="javascript:alert(test.outerHTML)">outerHTML内容</a>

特别说明:

  innerHTML是符合W3C标准的属性,而innerText只适用于IE浏览器,因此,尽可能地去使用innerHTML,而少用innerText,如果要输出不含HTML标签的内容,可以使用innerHTML取得包含HTML标签的内容后,再用正则表达式去除HTML标签,下面是一个简单的符合W3C标准的示例:


二。光标定位

按TAB键移动到下一个输入框时,光标停在文本框文字的最后,方便用户继续输入 <script>function moveEnd()
{
var e=event.srcElement;
var r=e.createTextRange();
r.moveStart('character',e.value.length);
r.collapse(true);
r.select();
}
</script>
<input type='text' value='0592' onfocus="moveEnd()"> 

document.selection.createRange方法document.selection.createRange() 根据当前文字选择返回 TextRange 对象,或根据控件选择返回 ControlRange 对象。配合 execCommand,在 HTML 编辑器中很有用,比如:文字加粗、斜体、复制、粘贴、创建超链接等。http://www.cftea.com/c/2006/12/47MWAA0YIJMDU9JO.asp有关于document.selection更多的属性和方法介绍


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >

<head>

<title>document.selection 的 createRange</title>

</head>

<body>

<div>请选中这里的部分文字。</div>

<div><input type="button" value="加粗" onclick="javascript:Bold();" /></div>

<script>function Bold()

{          var r = document.selection.createRange();          r.execCommand("Bold");}</script>

</body>

</html>

共计 0 条评论

NAME:

required

E-MAIL:

required, will not be published

HOMEPAGE:

CONTENT: