zoukankan      html  css  js  c++  java
  • 2013年5月9日星期四

    今天在解决bug的同时也不断引入新的bug;delphi和java web两种语言来回切换+各种电话干扰,效率真的很低,晚上在学习下知识作为自己的摘录笔记吧

    DOM对象的常用方法(自己总结觉得有用的)

    IEFirefox

    DOM结构——两个节点之间可能存在哪些关系以及如何在节点之间任意移动?
    document.documentElement 返回文档的根节点<html>
    -----------------------------------------------------------------------------
    document.body <body>
    -----------------------------------------------------------------------------
    document.activeElement 返回当前文档中被击活的标签节点(ie)
    -----------------------------------------------------------------------------
    event.fromElement 返回鼠标移出的源节点(ie)
    -----------------------------------------------------------------------------
    event.toElement 返回鼠标移入的源节点(ie)
    -----------------------------------------------------------------------------
    event.srcElement 返回激活事件的源节点(ie)
    event.target 返回激活事件的源节点(firefox)
    ------------------------------------
    当前对象为node
    返回父节点:node.parentNode, node.parendElement,
    返回所有子节点:node.childNodes(包含文本节点及标签节点),node.children
    返回第一个子节点:node.firstChild
    返回最后一个子节点: node.lastChild

    返回同属上一个子节点:node.nextSibling
    返回同属下一个子节点:node.previousSibling
    parentNode和parentElement功能一样,childNodes和children功能一样。但是parentNode和childNodes是符合W3C标准的,可以说比较通用。而另外两个只是IE支持,不是标准,Firefox就不支持 ,所以大家只要记得有parentElement和children就行了
    ------------------------------
    节点的操作:
    创建节点: document.createElement("div");//好像大都只能用document,不知道还能换成什么
    document.createTextNode("fdsafdas");
    还有一个创建节点碎片: document.createDocumentFragment();(可以用来减少页面多次刷新)
    例如:
    var oFragmeng = document.createDocumentFragment(); //先创建文档碎片
    for(var i=0;i<10000;i++){
    var op = document.createElement("span");
    var oText = document.createTextNode(i);
    op.appendChild(oText);
    oFragmeng.appendChild(op); //先附加在文档碎片中
    }
    document.body.appendChild(oFragmeng);//最后一次性添加到document中
    常用的添加节点:
    pnode.appendChild(node);//在节点pnode的子节点后追加node子节点
    pnode.insertBefore(newChild, oldChild);//在现有的子节点前插入一个新的子节点
    //newChild作为的pnode的子节点插入到其子节点oldChild之前
    oldChild为可选项参数,当为null时其效果与appendChild一样,记住这句话,两个参数就不会记倒了
    这里注意可没有pnode.insertAfter(),只能自己定义
    删除节点: pnode.removeChild(node)
    复制节点: pnode.cloneNode(include_all); //include_all为true时,则同时复制所有子节点,为false时,则只复制该节点(注意id也会被复制)
    替换节点: pnode.replaceChild(newnode,oldchild)
    访问节点::
    访问html元素:var oHtml=document.documentElement;
    获取head元素:var oHead=oHtml.firstChild;
    获取body元素:var oBody=oHtml.lastChild; 或者 var oBody=document.body;

    访问指定节点:
    熟知的getElementsByTagName(name),getElementsByName(name),getElementById(id)三个方法,不再展开。

    属性操作:
    getAttribute(name) ——返回名称为name的属性的值
    setAttribute(name,value) ——顾名思义
    removeAttribute(name) ——顾名思义

    为了简化创建表格,HTML DOM提供了一系列的表格方法,常用几个:
    cells ——返回</tr>元素中的所有单元格
    rows ——表格中所有行的集合
    insertRow(position) ——在rows集合中指定位置插入新行
    deleteRow(position) ——与insertRow相反
    insertCell(position) ——在cells集合的指定位置插入一个新的单元格
    deleteCell(position) ——与insertCell相反

    * DOM结构——两个节点之间可能存在哪些关系以及如何在节点之间任意移动。
    * DOM操作——怎样添加、移除、移动、复制、创建和查找节点。
    * 事件——怎样使用事件以及IE和DOM事件模型之间存在哪些主要差别。
    * XMLHttpRequest——这是什么、怎样完整地执行一次GET请求、怎样检测错误。
    * 严格模式与混杂模式——如何触发这两种模式,区分它们有何意义。
    * 盒模型——外边距、内边距和边框之间的关系,IE < 8中的盒模型有什么不同。
    * 块级元素与行内元素——怎么用CSS控制它们、它们怎样影响周围的元素以及你觉得应该如何定义它们的样式。
    * 浮动元素——怎么使用它们、它们有什么问题以及怎么解决这些问题。
    * HTML与XHTML——二者有什么区别,你觉得应该使用哪一个并说出理由。
    * JSON——它是什么、为什么应该使用它、到底该怎么使用它,说出实现细节来。

    js 作用域、预编译小结

    js

    1.js在页面加载过程中顺序执行。但是分块预编译、执行。
    2.JS 在执行前会进行类似"预编译"的操作,而且先预声明变量再预定义函数。
    此时注意,是声明,不是定义,如:var a = 1; 在预编译中,只是执行了"var a"没有赋值,即在预编译结束时a 为undefined。
    3.(注意)并不是先全文编译完在执行,而是块编译,即一个script块中,预编译再执行,然后(按顺序)下一个script块,预编译再执行,但此时上一个块中的数据都是可以用的,但下一个块中的函数,声明的变量都是不可用的。
    4.变量没声明就引用,会报错,但对象方法,对象变量没声明,是undefined
    5.在函数中变量不声明就赋值,会被认为是全局变量,用var声明后为函数变量
    6.在执行函数时时也是先编译后执行,但要注意函数定义中(即大括号中)的代码即使有错只要函数不执行,就不会有影响,但一执行函数,开始函数预编译就会出错。

    javascript之DOM技术

    一。样式编程

    5.最终样式:顾名思义,就是样式规则(外部定义和内联的)综合计算之后呈现给用户的样式信息,用来告诉我们元素最终是如何显示在屏幕上的。IE和标准的DOM也有区别:
    (1)IE中的最终样式称为currentStyle对象,与style对象不同的是它是只读的,你只能读而不能给它赋值。
    (2)DOM中的最终样式,通过document.defaultView.getComputedStyle(元素对象,伪元素对象或者null)方法获得

    二。innerHTML和innerText
    很常用的功能,特别是在AJAX应用中,经常采用的手段是从服务端返回一小段HTML代码,通过innerHTML嵌入某个层当中来动态显示下拉框等。一个比较常见的用法:
    oDiv.innertText=oDiv.innerText;
    表示从指定元素中删除所有的HTML标签。

    三。outerText和outerHTML

    与innerHTML和innerText,不过替换的是整个目标节点,仅在IE和opera中支持此特性

    四。范围:今天在ueditor中接触到,感觉很高深,有时候要再仔细体会下其中的妙处
    叫选区也许更为恰当,range用来选择文档的某个部分而不管节点的边界。也有两种的范围实现:DOM和IE的
    1.DOM的range
    (1)在DOM中创建选区的方法:

    Java代码

    1. var supportDOMRange=document.implementation.hasFeature("Range","2.0");
    2. if(supportDOMRange)
    3. var oRange=document.createRange();

    var supportDOMRange=document.implementation.hasFeature("Range","2.0");

    if(supportDOMRange)

    var oRange=document.createRange();


    先判断是否支持DOM,然后使用createRange()方法创建范围

    (2)简单选区
    考虑下面的代码:

    Java代码

    1. <p id="p1"><b>hello</b>world</p>

    <p id="p1"><b>hello</b>world</p>



    我们通过下面的JS代码来访问上面这段代码:

    Java代码

    1. var oRange1=document.createRange();
    2. var oRange2=document.createRange();
    3. var op1=document.getElementById("p1");
    4. oRange1.selectNode(op1);
    5. oRange2.selectNodeContents(op1);

    var oRange1=document.createRange();

    var oRange2=document.createRange();

    var op1=document.getElementById("p1");

    oRange1.selectNode(op1);

    oRange2.selectNodeContents(op1);



    两个范围,通过selectNode和selectNodeContents方法来选区,有什么不同呢?oRange1选中的范围包括<p/>节点以及它的全部子节点,而oRange2只包含op1的子节点和文本节点(就是"<b>hello</b>world")。

    (3)范围的特性:
    <1>startContainer——范围是从哪个节点开始的,也就是第一个节点的父节点
    <2>startOffset——在startContainer的偏移位置。
    <3>endContainer——最后一个节点的父节点
    <4>endOffset——在endContainer中范围结束的偏移位置
    <5>commonAncestorContainer——startContainer和endContainer都处于哪个最小的节点
    演示这些特性的例子:

    Java代码

    1. <html>
    2. <head>
    3. <title>DOM Range Example</title>
    4. <script type="text/javascript">
    5. function useRanges() {
    6. var oRange1 = document.createRange();
    7. var oRange2 = document.createRange();
    8. var oP1 = document.getElementById("p1");
    9. oRange1.selectNode(oP1);
    10. oRange2.selectNodeContents(oP1);
    11. document.getElementById("txtStartContainer1").value = oRange1.startContainer.tagName;
    12. document.getElementById("txtStartOffset1").value = oRange1.startOffset;
    13. document.getElementById("txtEndContainer1").value = oRange1.endContainer.tagName;
    14. document.getElementById("txtEndOffset1").value = oRange1.endOffset;
    15. document.getElementById("txtCommonAncestor1").value = oRange1.commonAncestorContainer.tagName;
    16. document.getElementById("txtStartContainer2").value = oRange2.startContainer.tagName;
    17. document.getElementById("txtStartOffset2").value = oRange2.startOffset;
    18. document.getElementById("txtEndContainer2").value = oRange2.endContainer.tagName;
    19. document.getElementById("txtEndOffset2").value = oRange2.endOffset;
    20. document.getElementById("txtCommonAncestor2").value = oRange2.commonAncestorContainer.tagName;
    21. }
    22. </script>
    23. </head>
    24. <body><p id="p1"><b>Hello</b> World</p>
    25. <input type="button" value="Use Ranges" onclick="useRanges()" />
    26. <table border="0">
    27. <tr>
    28. <td>
    29. <fieldset>
    30. <legend>oRange1</legend>
    31. Start Container: <input type="text" id="txtStartContainer1" /><br />
    32. Start Offset: <input type="text" id="txtStartOffset1" /><br />
    33. End Container: <input type="text" id="txtEndContainer1" /><br />
    34. End Offset: <input type="text" id="txtEndOffset1" /><br />
    35. Common Ancestor: <input type="text" id="txtCommonAncestor1" /><br />
    36. </fieldset>
    37. </td>
    38. <td>
    39. <fieldset>
    40. <legend>oRange2</legend>
    41. Start Container: <input type="text" id="txtStartContainer2" /><br />
    42. Start Offset: <input type="text" id="txtStartOffset2" /><br />
    43. End Container: <input type="text" id="txtEndContainer2" /><br />
    44. End Offset: <input type="text" id="txtEndOffset2" /><br />
    45. Common Ancestor: <input type="text" id="txtCommonAncestor2" /><br />
    46. </fieldset>
    47. </td>
    48. </tr>
    49. </table>
    50. <p><strong>Note:</strong> This example uses DOM ranges and will only work in browsers that support DOM ranges. This example will fail in Internet Explorer.</p>
    51. </body>
    52. </html>

    <html>

    <head>

    <title>DOM Range Example</title>

    <script type="text/javascript">

    function useRanges() {

    var oRange1 = document.createRange();

    var oRange2 = document.createRange();

    var oP1 = document.getElementById("p1");

    oRange1.selectNode(oP1);

    oRange2.selectNodeContents(oP1);

     

    document.getElementById("txtStartContainer1").value = oRange1.startContainer.tagName;

    document.getElementById("txtStartOffset1").value = oRange1.startOffset;

    document.getElementById("txtEndContainer1").value = oRange1.endContainer.tagName;

    document.getElementById("txtEndOffset1").value = oRange1.endOffset;

    document.getElementById("txtCommonAncestor1").value = oRange1.commonAncestorContainer.tagName;

     

    document.getElementById("txtStartContainer2").value = oRange2.startContainer.tagName;

    document.getElementById("txtStartOffset2").value = oRange2.startOffset;

    document.getElementById("txtEndContainer2").value = oRange2.endContainer.tagName;

    document.getElementById("txtEndOffset2").value = oRange2.endOffset;

    document.getElementById("txtCommonAncestor2").value = oRange2.commonAncestorContainer.tagName;

    }

    </script>

    </head>

    <body><p id="p1"><b>Hello</b> World</p>

    <input type="button" value="Use Ranges" onclick="useRanges()" />

    <table border="0">

    <tr>

    <td>

    <fieldset>

    <legend>oRange1</legend>

    Start Container: <input type="text" id="txtStartContainer1" /><br />

    Start Offset: <input type="text" id="txtStartOffset1" /><br />

    End Container: <input type="text" id="txtEndContainer1" /><br />

    End Offset: <input type="text" id="txtEndOffset1" /><br />

    Common Ancestor: <input type="text" id="txtCommonAncestor1" /><br />

    </fieldset>

    </td>

    <td>

    <fieldset>

    <legend>oRange2</legend>

    Start Container: <input type="text" id="txtStartContainer2" /><br />

    Start Offset: <input type="text" id="txtStartOffset2" /><br />

    End Container: <input type="text" id="txtEndContainer2" /><br />

    End Offset: <input type="text" id="txtEndOffset2" /><br />

    Common Ancestor: <input type="text" id="txtCommonAncestor2" /><br />

    </fieldset>

    </td>

    </tr>

    </table>

    <p><strong>Note:</strong> This example uses DOM ranges and will only work in browsers that support DOM ranges. This example will fail in Internet Explorer.</p>

     

    </body>

    </html>



    (4)复杂选区
    通过setStart和setEnd来实现复杂选区,两个方法都接受两个参数:节点引用和偏移量。

    (5)与范围对象的交互
    <1>deleteContents(),删除范围内容
    <2>extractContents,与deleteContents()相似,只不过返回被删除的文档碎片
    <3>cloneContents(),创建范围内容副本
    <4>surroundContents(node),插入包围范围的内容
    <5>insertNode(node),在选区开头插入节点
    <6>cloneRange(),复制范围
    <7>detach(),释放系统资源
    <8>compareBoundaryPoints()方法,比较范围,两个参数,一个比较规则(Range.START_START,Range.START_TO_END,Range.END_TO_START,Range.END_TO_END),一个是比较的范围引用


    2.IE中的范围
    IE 的范围并不标准,主要用来处理文本节点,调用<body/>,<button/>,<input />,<textarea>节点的createTextRange方法来创建范围,建议用 document.body.createTextRange()来创建,因为其他元素创建的范围仅能用于它们内部。
    (1)简单选区:
    同样以下面这段代码为例子:

    Java代码

    1. <p id="p1"><b>hello</b>world</p>

    <p id="p1"><b>hello</b>world</p>



    要选择hello,可以使用:

    Java代码

    1. var oRange=document.body.createTextRange();
    2. oRange.findText("hello");

    var oRange=document.body.createTextRange();

    oRange.findText("hello");



    findText方法还可以接受第2个参数,如oRange.findText("hello",1);将选择hello之后再次找到的hello文本节点。
    与DOM中的selectNode方法最相似的是IE的moveToElementText()方法,比如我们要选中p1节点以及它的所有子节点:

    Java代码

    1. var oRange=document.body.createTextRange();
    2. var oP1=document.getElementById("p1');
    3. oRange.moveToElementText(oP1);
    4. alert(oP1.htmlText);

    var oRange=document.body.createTextRange();

    var oP1=document.getElementById("p1');

    oRange.moveToElementText(oP1);

    alert(oP1.htmlText);



    另外,oRange.parentElement()返回选区的父节点。

    (2)复杂选区:
    move(),moveStart(),moveEnd(),expand()方法实现复杂选区,这些方法都接受两个参数:移动的单位("character","word","sentence","textedit")和移动的单位的个数。

    (3)与范围交互
    <1>text属性,比如oRange.text="hello";
    <2>pasteHTML(),插入HTMl代码,比如oRange.pasteHTML("<em>test</em>");
    <3>duplicate(),复制范围
    <4>compareEndPoints() 方法,比较范围,第一个参数也是比较规则("StartToStart","StartToEnd,EndToStart","EndToEnd")和比较的范围引用。也可以通过isEqual()和isRange()方法来比较。

    3.范围的常见应用,比如搜索引擎中,搜索出来的链接中的关键字用特别的颜色包围起来,另外就是网页广告比较常用。

  • 相关阅读:
    Shiro基础
    Nginx+tomcat集群使用redis共享session
    小程序 wepy wx.createAnimation 向右滑动渐入渐出
    小程序util工具
    记错本~~
    小程序BindTap快速连续点击页面跳转多次
    微信小程序页面无法跳转
    CSS:font-family常用字体中英文对照
    git 常用指令
    js 获取数组重复的元素
  • 原文地址:https://www.cnblogs.com/doit8791/p/3070280.html
Copyright © 2011-2022 走看看