JavaScript高级程序设计(第3版)学习笔记15——DOM基础

  从这篇笔记开始整理JavaScript的第三部分:文档对象模型DOMDocument Object Model)。DOM是针对HTMLXML文档的一个API,脱胎于DHTML,由W3C负责制定相关标准,现在已经成为表现和操作页面标记的真正的跨平台、语言中立的一种标准,除了JavaScript外,其它一些语言比如SVGMathML等也不同程度的实现了各自的DOM

1、DOM组成和级别

  DOM分为三个组成部分和三个级别:

组成部分 说明
核心DOM 用于任何结构化文档的标准模型
XML DOM 用于XML文档的标准模型,定义了所有XML元素的对象和属性,以及访问它们的方法(接口),换句话说,XML DOM是用于获取、更改、添加或删除XML元素的标准
HMTL DOM 用于HTML文档的标准模型,定义了所有HTML元素的对象和属性,以及访问它们的方法(接口)
DOM级别 浏览器支持情况 功能模块 说明
0级 IE4、Netscape4 W3C标准中,是没有0级的,通常所谓DOM 0级指的就是在DOM 1级规范之前的在IE4Netscape Navigator4中支持的DHTML
1级 几乎所有现代浏览器 DOM核心(DOM Core) 规定的是如何映射基于XML的文档结构,以便简化对文档中任意部分的访问和操作
DOM HTML DOM核心基础上加以扩展,添加了针对HTML的对象和方法
2级 IE 9+
Opera 7-9.9
(部分支持),OPera 10+
Safari 2+
(部分支持)
Chrome 1+
(部分支持)
Firefox 1+
(几乎全部)
DOM视图(DOM Views) 定义了跟踪不同文档(例如,应用CSS前后的文档)视图的接口
DOM事件(DOM Events) 定义了事件和事件处理的接口
DOM样式(DOM Style) 定义了基于CSS为元素应用样式的接口
DOM遍历和范围(DOM Traversal and Range) 定义了遍历和操作文档树的接口
DOM核心和HTML扩展 开始支持XML命名空间等
3级 IE9+
Opera9+
(部分支持)
Firefox1+
(部分支持)
DOM加载和保存(DOM Load and Save 引入了以统一方式加载和保存文档的方法
DOM验证(DOM Validation 验证文档的方法
DOM核心和HTML扩展 开始支持XML1.0规范,涉及XML InfosetXPathXMLBase

2、文档映射

DOMHTMLXML文档映射成一个由不同节点组成的树型机构,每种节点都对应于文档中的信息或标记,节点有自己的属性和方法,并和其他节点存在某种关系,节点之间的关系构成了节点层次,例如:

<html>
    <head>
        <title>标题title>
    head>
    <body>
        <p>测试p>
    body>
html>

1)文档节点Document是每个文档的根节点
2)文档元素:如右图,文档节点只有一个子节点,即元素,称之为文档元素。文档元素是文档的最外层元素,其他所有元素都包含在文档元素中,每个文档只能有一个文档元素。在HTML中,文档元素永远是元素,但是在XML中,没有预定义元素,因此任何元素都可能成为文档元素。
3)文档中每一段标记都通过树中的一个节点来表示,比如HTML元素通过元素节点表示,特性(attribute)通过特性节点表示,文档类型通过文档类型节点表示,而注释则通过注释节点表示。在DOM1中,总共有12种节点类型,他们都继承自一个基类型。

JavaScript高级程序设计(第3版)学习笔记15——DOM基础_第1张图片

 

3、Node接口

类别 属性/方法 /类型/返回类型 说明
属性 nodeName String 节点名字,根据节点类型定义。对于元素节点,就是原始的标签名
nodeValue String 节点值,根据节点类型定义。对于元素节点为null
nodeType Number 节点类型,返回12种节点类型值之一
ownerDocument Document 指向这个节点所属的文档,可以利用它直接访问文档节点,而不用层层回溯
parentNode Node 文档树中的父节点
childNodes NodeList 所有直接子节点组成的列表,不同浏览器对空白字符和外的注释有不同处理,会导致childNodes不一致
firstChild Node 第一个直接子节点,没有子节点返回null
lastChild Node 最后一个直接子节点,没有子节点返回null
previousSibiling Node 前一个兄弟节点,没有则返回null
nextSibiling Node 后一个兄弟节点,没有则返回null
方法 hasChildNodes() Boolean 有子节点时返回true,否则返回false
appendChild(node) Node 在末尾添加子节点,返回新添加的节点。如果传入参数已经是文档中一部分,结果将是将该节点从原来的位置移向新位置(任何DOM节点不能同时出现在多个位置上)
removeChild(node) Node 移除节点并返回这个节点。删除后,节点仍然属于原来的文档,只是没有了位置
replaceChild(node,node) Node 传入新添加的节点和被替换的节点,返回被替换的节点。被替换的节点仍然属于原来的文档,只是没有了位置
insertBefore(node,node) Node 传入新添加的节点和参照节点,新添加节点会成为参照节点的前一个兄弟节点,如果参照节点为null,则插入到最后,相当于appendChild()。返回新添加的节点
cloneNode(boolean) Node 复制节点,参数为true时,复制节点及其所有子节点树,为false时,只复制节点本身。返回的节点属于文档所有,但没有指定父节点
normalize()   处理文档树中的文本节点,删除空文档节点或合并两个相邻的文本节点等

说明:

(1)关于节点类型nodeType,在DOM1中定义了12种常量,是作为Node类型构造函数的属性定义的(静态属性),它们对应于各自的节点类型:

节点 节点类型(nodeTypeNode的静态属性) 节点名称(nodeName 节点值(nodeValue 父节点(parentNode 子节点(childNodes 说明
Document Node.DOCUMENT_NODE(9) #document null null DocumentType(最多一个)|Element(最多一个)
|Comment|ProcessingInstruction
下有进一步叙述
Element Node.ELEMENT_NODE(1) 元素的标签名 null Document|Element Element|Text|Comment|
ProcessingInstruction|
CDATASection|EntityReference
Text Node.TEXT_NODE(3) #text 节点所包含的文本 Element (不支持)没有子节点
Comment Node.COMMENT_NODE(8) #comment 注释的内容 Document|Element (不支持)没有子节点 和Text继承自相同基类,拥有除splitText()外所有字符串方法,可通过nodeValue或data属性获取注释内容
CDATASection Node.CDATA_SECTION_NODE(4) #cdata-section CDATA区域的内容 Document|Element (不支持)没有子节点 继承自Text类型,拥有除splitText()外所有字符串方法
DocumentType Node.DOCUMENT_TYPE_NODE(10) doctype的名称 null Document (不支持)没有子节点 在DOM1中不能动态创建,DocumentType对象的3个属性:
name表示文档类型名称
entities表示描述文档类型实体的NamedNodeMap
notations表示文档类型描述的符号的NamedNodeMap
DocumentFragment Node.DOCUMENT_FRAGMENT_NODE(11) #document-fragment null null 同Element类型 下有进一步叙述
Attr Node.ATTRIBUTE_NODE(2) 特性名称 特性值 null HTML中不支持,XML中可以是TextEntityReference 有3个自己的属性:
name等于nodeName
value等于nodeValue
specified表示是否为默认设置
EntityReference Node.ENTITY_REFERENCE_NODE(5) 引用的实体名称 null     实体引用节点
Entity Node.ENTITY_NODE(6) entity name null     实体节点
ProcessingInstruction  Node.PROCESSING_INSTRUCTION_NODE(7) ProcessingInstruction.target 相同 ProcessingInstruction.data 相同     处理指令
Notation  Node.NOTATION_NODE(12) notation name null     DTD中定义的符号

这些节点类型都实现了Node接口,因此都可以访问Node类型的属性和方法(不支持子节点的节点类型上调用appendChild()、insertBefore()、replaceChild()、removeChild()等方法时会抛出异常)。经过测试在IE9中已经可以直接访问Node类型中定义的常量值,并且IE9中这些值不能改变,而在Firefox15的版本中仍然可以修改,这应该是Firefox实现的一个Bug(原书说IE中不可访问Node的论述似有不妥)。

Node.DOCUMENT_NODE = 2;
console.info(Node.DOCUMENT_NODE);//IE9输出9,而Firefox15输出的是2

2)关于NodeList类型,它也是一个类数组类型,有length属性,也可以通过方括号语法访问,还可以通过item()方法访问,但并不是Array的实例,如果要对其使用数组方法,必须像转换arguments对象一样来转换NodeList对象:

var node = document;//任意一个节点,这里使用文档根节点测试
console.info(node.childNodes.length);//2,直接子节点
console.info(node.childNodes[0].nodeName);//通过方括号语法访问第1个元素,索引从0开始
console.info(node.childNodes.item(1).nodeName);//通过item()方法访问第2个元素,索引从0开始
var arr = Array.prototype.slice.call(node.childNodes,0);//转换为真正的数组
console.info(arr.join(','));//可以使用数组方法了

需要特别注意的是,NodeList对象类型是一个有生命、有呼吸的对象,它的属性和元素是跟随文档变化而变化的:

var node = document;
var nodeList = node.childNodes;
var src = nodeList.length;
node.removeChild(nodeList[0]);//修改文档,会同时修改NodeList对象的属性和元素,即便是已经将其保存为另外一个变量
console.info(nodeList.length == src - 1);//true

类似NodeList这种动态变化的对象对象还有HTMLCollectionNamedNodeMap等,其中HTMLCollection还有一个namedItem()方法,可以通过元素的name获取集合中的项。

4、Document类型

  在JavaScript中,通过Document类型表示文档,而我们通常使用的document对象则是HTMLDocument(继承自Document类型)的一个实例,表示整个HTML页面。同时,docuemnt对象也是window对象的一个属性,可以作为全局对象来访问。document对象的主要属性和方法有:

类别 属性/方法 说明 备注
属性 documentElement 指向HTML页面中的元素 作为document的子节点,元素还可以通过document.firstChilddocument.childNodes[0]等方式访问
body 直接指向HTML页面中的元素 document.body的使用频率非常高
doctype 表示相关信息,不同浏览器差异比较大,因此用处不大 有些浏览器会把作为注释处理
title 包含</span><span>元素中的文本,显示在浏览器窗口的标题和标签页上,可以通过它修改标题</span></td> <td><span>修改</span><span>title</span><span>属性的值不会改变</span><span><title></span><span>元素</span></td> </tr> <tr> <td><span>URL</span></td> <td><span>页面完整的</span><span>URL</span><span>,即地址栏中显示的</span><span>URL</span></td> <td rowspan="3"><span>这些信息都存在于请求的</span><span>HTTP</span><span>头部,这些属性是为了方便在</span><span>JavaScript</span><span>中访问,</span><span>domain</span><span>的设置需要注意:</span><span><br>1</span><span>、不能将</span><span>domain</span><span>设置为</span><span>URL</span><span>不包含的域,如</span><span>URL='p2p.wrox.com'</span><span>,</span><span>domain</span><span>可以设置为</span><span>wrox.com</span><span>,但不能设置为</span><span>ncz.net<br>2</span><span>、不能将</span><span>domain</span><span>由松散的设置为紧绷的,如原来</span><span>domain='wrox.com'</span><span>,不能设置为</span><span>domain='p2p.wrox.com' </span></td> </tr> <tr> <td><span>domain</span></td> <td><span>页面的域名,可以设置</span></td> </tr> <tr> <td><span style="color: #0000ff;">referrer</span></td> <td><span>链接到当前页面的那个页面的</span><span>URL</span><span>,没有来源页面时,为空字符串</span></td> </tr> <tr> <td><span>implementation</span></td> <td><span>提供浏览器对</span><span>DOM</span><span>实现情况的描述对象,在</span><span>DOM1</span><span>只有一个</span><span>hasFeature()</span><span>方法</span></td> <td><span>hasFeature()</span><span>接受两个参数:</span><span>DOM</span><span>功能和版本号。由于浏览器实现问题,这个方法并非百分百准确</span></td> </tr> <tr> <td rowspan="5"><span>文档元素集合</span></td> <td><span>anchors</span></td> <td><span>包含文档中所有带</span><span>name</span><span>特性的</span><span><a></span><span>元素</span></td> <td rowspan="5"><span>这些集合都是</span><span>HTMLCollection</span><span>对象,集合中的项会随文档的变化而更新</span></td> </tr> <tr> <td><span>applets</span></td> <td><span>包含文档中所有</span><span><applet></span><span>元素,已经不推荐使用</span></td> </tr> <tr> <td><span style="color: #0000ff;">forms</span></td> <td><span>包含文档中所有</span><span><form></span><span>元素,相当于</span><span>document.getElementsByTagName('form')</span></td> </tr> <tr> <td><span>images</span></td> <td><span>包含文档中所有</span><span><img></span><span>元素,相当于</span><span>document.getElementsByTagName('img')</span></td> </tr> <tr> <td><span>links</span></td> <td><span>包含文档中所有带</span><span>href</span><span>特性的</span><span><a></span><span>元素</span></td> </tr> <tr> <td rowspan="3"><span>元素获取方法</span></td> <td><span style="color: #0000ff;">getElementById()</span></td> <td><span>接受一个参数:要获取元素的</span><span>ID</span><span>,匹配大小写,找不到时返回</span><span>null</span><span>,若有多个相同</span><span>ID</span><span>元素,返回第一个</span></td> <td><span>在</span><span>IE8-</span><span>中不区分大小写,并且表单元素(如</span><span><input></span><span>)中的</span><span>name</span><span>也被作为</span><span>ID</span><span>去查询</span></td> </tr> <tr> <td><span style="color: #0000ff;">getElementsByTagName()</span></td> <td><span>接受一个参数:要获取元素的标签名,返回包含</span><span>0</span><span>或多个元素的</span><span>NodeList</span><span>,在</span><span>HTML</span><span>中,返回</span><span>HTMLCollection</span></td> <td><span>传入</span><span>*</span><span>号时,则返回文档中所有元素,可以通过索引</span><span>(</span><span>调用</span><span>item())</span><span>、字符串(调用</span><span>namedItem()</span><span>)、以及直接使用</span><span>item()</span><span>方法访问结果集</span></td> </tr> <tr> <td><span style="color: #0000ff;">getElementsByName()</span></td> <td><span>HTMLDocument</span><span>特有方法,返回</span><span>name</span><span>特性为传入参数值的元素集合,返回</span><span>HTMLCollection</span><span>对象</span></td> <td><span>使用</span><span>namedItem()</span><span>时,只返回第一项,因为是按</span><span>name</span><span>获取的集合,集合中的</span><span>name</span><span>全部相同</span></td> </tr> <tr> <td rowspan="4"><span>文档写入方法</span></td> <td><span style="color: #0000ff;">write()</span></td> <td><span>输出文本,接受一个参数:写入到输出流的文本</span></td> <td rowspan="4"><span>write()</span><span>和</span><span>writeln()</span><span>被用来向页面动态地输入内容,需要注意的是:</span><span><br>1</span><span>、如果输出内容中含</span><span>'</script>'</span><span>,为了防止做为标签解析而发生错误,需要特殊处理,可以写成</span><span>'<\/script>'</span><span>或拆分</span><span><br>2</span><span>、如果是页面加载完成之后调用,会重写整个页面</span></td> </tr> <tr> <td><span style="color: #0000ff;">writeln()</span></td> <td><span>输出文本,并添加换行符(</span><span>\n</span><span>),接受一个参数:写入到输出流的文本</span></td> </tr> <tr> <td><span>open()</span></td> <td><span>打开网页输出流</span></td> </tr> <tr> <td><span>close()</span></td> <td><span>关闭网页输出流</span></td> </tr> <tr> <td rowspan="6"><span>创建方法</span></td> <td><span style="color: #0000ff;">createElement()</span></td> <td><span>创建新元素,并设置</span><span>ownerDocument</span><span>属性,接受一个参数:要创建元素的标签名(在</span><span>HTML</span><span>中不分大小写,在</span><span>XML</span><span>中区分)</span></td> <td><span>在</span><span>IE</span><span>中还可以传入包含属性的完整的元素标签来创建新元素</span></td> </tr> <tr> <td><span style="color: #0000ff;">createTextNode()</span></td> <td>创建文本节点,接受一个参数:要插入节点中的文本(会按HTML/XML格式编码),会同时设置ownerDocument</td> <td><span>除非把新节点添加到文档中,否则不会显示新节点</span></td> </tr> <tr> <td><span>createComment()</span></td> <td>创建新注释,接受注释文本</td> <td>浏览器不会识别<html>后代注释,如要访问注释节点,需要保证是<html>元素的后代 </td> </tr> <tr> <td><span>createCDATASection()</span></td> <td>在XML文件中创建CDATA区域,传入节点内容</td> <td><span>CDATA区域只会出现XML文档中,因此多数浏览器会报CDATA区域错误地解析为Comment或Element</span></td> </tr> <tr> <td><span>createDocumentFragment()</span></td> <td>创建文档片段</td> <td> </td> </tr> <tr> <td><span>createAttribute()</span></td> <td><span>创建新特性节点</span></td> <td> </td> </tr> </tbody> </table> <p><span><span><span>说明:</span></span></span></p> <p><span><span><span>(1)一般情况下,不用在</span><span>document</span><span>对象上调用</span><span>appendChild()</span><span>、</span><span>insertBefore()</span><span>、</span><span>removeChild()</span><span>、</span><span>replaceChild()</span><span>等方法,因为文档类型(如果存在的话)是只读的,而且它只能有一个元素子节点。</span></span></span></p> <p><span><span><span>(2)document对象的创建方法,是实现动态加载脚本或样式的基础,从而可以进一步对代码模块化,实现按需加载,提升性能,这在Ext4库中已经很好地应用了。动态加载的一般方法:</span></span></span></p> <div class="cnblogs_code"> <pre><span style="color: #0000ff;">function</span> loadScript(url){<span style="color: #008000;">//</span><span style="color: #008000;">动态加载外部js文件,也可以类似的加载js代码</span> <span style="color: #0000ff;">var</span> script = document.createElement("script"<span style="color: #000000;">); script.type </span>= "text/javascript"<span style="color: #000000;">; script.src </span>=<span style="color: #000000;"> url; document.body.appendChild(script); } </span><span style="color: #0000ff;">function</span> loadStyle(url){<span style="color: #008000;">//</span><span style="color: #008000;">动态加载外部css文件,也可以类似的通过style元素加载css代码</span> <span style="color: #0000ff;">var</span> link = document.createElement("link"<span style="color: #000000;">); link.rel </span>= "stylesheet"<span style="color: #000000;">; link.type </span>= "text/css"<span style="color: #000000;">; link.href </span>=<span style="color: #000000;"> url; </span><span style="color: #0000ff;">var</span> head = document.getElementsByTagName("head")[0<span style="color: #000000;">]; head.appendChild(link); }</span></pre> </div> <p>5、Element类型</p> <p><span><span><span>  Element</span><span>类型用于表现</span><span>XML</span><span>或</span><span>HTML</span><span>元素,提供了对元素标签名、子节点以及特性的访问。在</span><span>HTML</span><span>中,元素由</span><span>HTMLElement</span><span>类型(或其子类型)表示,</span><span>HTMLElement</span><span>继承了</span><span>Element</span><span>类型,并添加了对应每个</span><span>HTML</span><span>元素都存在的标准特性的属性。</span><span>HTMLElement</span><span>类型常用属性和方法总结如下:</span></span></span></p> <table class="cnblogs_code" border="1"> <tbody> <tr> <td><span>类别</span></td> <td colspan="2"><span>属性</span><span>/</span><span>特性</span></td> <td><span>说明</span></td> </tr> <tr> <td><span>Element</span><span>类型属性</span></td> <td colspan="2"><span>tagName</span></td> <td><span>这个属性是所有</span><span>Element</span><span>都有的,值和</span><span>nodeName</span><span>相同,表示元素标签名,在</span><span>HTML</span><span>中,返回的标签名始终大写,在</span><span>XML</span><span>中,和源代码一致</span></td> </tr> <tr> <td rowspan="5"><span>HTML</span><span>元素标准特性</span></td> <td><span>id</span></td> <td><span>id</span></td> <td><span>元素在文档中的唯一标识符</span></td> </tr> <tr> <td><span>title</span></td> <td><span>title</span></td> <td><span>有关元素的附件说明信息,一般通过工具条显示出来</span></td> </tr> <tr> <td><span>lang</span></td> <td><span>lang</span></td> <td><span>元素内容的语言代码,很少使用</span></td> </tr> <tr> <td><span>dir</span></td> <td><span>dir</span></td> <td><span>语言的方向,</span><span>ltr</span><span>:从左至右,</span><span>rtl</span><span>:从右至左,也很少使用</span></td> </tr> <tr> <td><span>className</span></td> <td><span>class</span></td> <td><span>元素的</span><span>CSS</span><span>类,因为</span><span>class</span><span>是保留字,所以属性命名为</span><span>className</span></td> </tr> <tr> <td><span>特性属性</span></td> <td colspan="2"><span>attributes</span></td> <td><span>这个是属性只有</span><span>Element</span><span>类型使用,是一个</span><span>NamedNodeMap</span><span>值,属于一个</span><span>“</span><span>动态</span><span>”</span><span>集合</span></td> </tr> <tr> <td rowspan="3"><span>特性方法</span></td> <td colspan="2"><span>getAttribute()</span></td> <td><span>参数:特性名。参数必须与实际的特性名相同,因此是</span><span>class</span><span>而不是</span><span>className</span><span>,给定特性不存在时,返回</span><span>null</span><span>,这个方法也可以获取自定义特性,特性名不区分大小写</span></td> </tr> <tr> <td colspan="2"><span>setAttribute()</span></td> <td><span>参数:特性名和特性值。如果已存在该特性,替换现有的值,如果不存在,就创建并赋值。通过这个方法设置特性时,会把特性名转换为小写形式</span></td> </tr> <tr> <td colspan="2"><span>removeAttribute()</span></td> <td><span>参数:特性名。彻底删除元素的特性,不仅会清除特性的值,也会从元素对象中删除特性</span></td> </tr> <tr> <td rowspan="2"><span>特性节点方法</span></td> <td colspan="2"><span>getAttributeNode()</span></td> <td><span>返回对应特性的</span><span>Attr</span><span>节点,</span><span>element.getAttributeNode('align')</span><span>相当于</span><span>element.attributes['align']</span></td> </tr> <tr> <td colspan="2"><span>setAttributeNode()</span></td> <td><span>设置元素的</span><span>Attr</span><span>节点</span></td> </tr> <tr> <td><span>其它方法</span></td> <td colspan="2"><span>getElementsByTagName()</span></td> <td><span>在当前元素的后代节点中搜索,其它用法和</span><span>Document</span><span>类型的同名方法一样</span></td> </tr> </tbody> </table> <p><span>说明:</span></p> <p>(1)特殊特性:</p> <p>  A、class特性,其对应DOM对象的属性为className,在特性方法操作中参数需要传入class,而对象属性操作需要设置className属性。</p> <p>  B、style特性,在通过getAttribute()访问时,返回的是style特性值中包含的CSS文本,而通过属性来访问它则会返回一个对象。</p> <p>  C、事件处理特性,比如onclick,当在元素上使用时,onclick特性中包含的是JavaScript代码,如果通过getAttribute()访问,返回相应代码的字符串,而在访问onclick属性时,会返回一个JavaScript函数(没有相应特性时返回null)。</p> <p>(2)关于自定义特性和属性,在HTML5规范中,需加上“data-”前缀。</p> <p>  A、给节点设置特性值时,会同步修改相应DOM对象的属性值,但是设置自定义特性的值时,一般浏览器是不会为相应的DOM对象添加属性的,然而IE也会为自定义特性创建属性。</p> <p>  B、直接给DOM对象设置属性值时,会同步修改相应节点元素的特性值,但是一般浏览器中自定义属性不会成为元素的特性,使用getArrtibute()时会返回null,然而IE会为自定义属性创建特性。</p> <p>(3)HTMLElement类型是HTML中元素的基类型,对应不同的标签,还有很多更加具体的子类型,这些子类型也有与之相关的特性和方法,比如对应<body>标签有HTMLBodyElement类型、对应<table>标签有HTMLTableElement类型等。</p> <p>(4)元素的子节点,可以有任意数目的子节点和后代节点,childNodes属性则包括了所有直接子节点,但是由于不同浏览器在处理注释、文本等节点的不同,会使得childNodes也不同,因此,如果需要遍历元素子节点的话,需要添加节点类型判断:</p> <div class="cnblogs_code"> <pre><span style="color: #0000ff;">for</span>(<span style="color: #0000ff;">var</span> i=0,l=element.childNodes.length; i < l; i++<span style="color: #000000;">){ </span><span style="color: #0000ff;">if</span>(element.childNodes[i].nodeType === 1)<span style="color: #008000;">//</span><span style="color: #008000;">过滤元素子节点</span> <span style="color: #000000;"> {     </span><span style="color: #008000;">//</span><span style="color: #008000;">对元素子节点做操作</span> <span style="color: #000000;"> } }</span></pre> </div> <p>(5)元素的每一个特性都由一个Attr节点表示,每个节点都保存在一个NamedNodeMap对象中,这个对象和NodeList与HTMLCollection类似,是一个“动态”的,随文档变化而变化,它有下面的一些方法:</p> <table class="cnblogs_code" border="1"> <tbody> <tr> <td><span>方法</span></td> <td><span>说明</span></td> </tr> <tr> <td><span>getNamesItem(name)</span></td> <td><span>返回</span><span>nodeName</span><span>等于</span><span>name</span><span>的节点</span></td> </tr> <tr> <td><span>removeNamedItem(name)</span></td> <td><span>从列表中移除</span><span>nodeName</span><span>等于那么的节点,调用</span><span>removeNamedItem()</span><span>与在元素上调用</span><span>removeAttribute()</span><span>效果相同,只是前者返回被移除的</span><span>Attr</span><span>节点</span></td> </tr> <tr> <td><span>setNamedItem(node)</span></td> <td><span>向列表中添加节点,以节点的</span><span>nodeName</span><span>属性为索引</span></td> </tr> <tr> <td><span>item(pos)</span></td> <td><span>返回位于数字</span><span>pos</span><span>位置处的节点</span></td> </tr> </tbody> </table> <p>元素的attributes属性返回的就是一个NamedNodeMap对象,其中包含一系列Attr节点,每个节点的nodeName就是特性名称,nodeValue就是特性值,可以使用attributes属性来遍历元素的特性(原书第268页):</p> <div class="cnblogs_code"> <pre><span style="color: #0000ff;">function</span><span style="color: #000000;"> outputAttributes(element){ </span><span style="color: #0000ff;">var</span> pairs = <span style="color: #0000ff;">new</span><span style="color: #000000;"> Array(), attr; </span><span style="color: #0000ff;">for</span>(<span style="color: #0000ff;">var</span> i=0, len=element.attributes.length; i < len; i++<span style="color: #000000;">){ attr </span>=<span style="color: #000000;"> element.attributes[i]; </span><span style="color: #0000ff;">if</span>(attr.specified){<span style="color: #008000;">//</span><span style="color: #008000;">specified属性表示特性值是设置还是默认的,为true表示设置的</span> pairs.push(attr.nodeName + "=\"" +attr.nodeValue + "\""<span style="color: #000000;">); } } </span><span style="color: #0000ff;">return</span> pairs.join(" ");<span style="color: #008000;">//</span><span style="color: #008000;">以空格连接各个特性并返回</span> }</pre> </div> <p>6、Text类型</p> <p>  文本节点由Text类型表示,包含的是可以按字面解释的纯文本内容,可以包含转义后的HTML字符,但不能包含HTML代码,Text类型的主要属性和方法有:</p> <table class="cnblogs_code" border="1"> <tbody> <tr> <td>类别</td> <td>属性/方法</td> <td>说明</td> </tr> <tr> <td rowspan="2">属性</td> <td>length</td> <td>文本字符数</td> </tr> <tr> <td>data</td> <td>文本字符,和nodeValue值相同</td> </tr> <tr> <td rowspan="6">方法</td> <td>appendData(text)</td> <td>将text添加到文本节点末尾</td> </tr> <tr> <td>deleteData(offset,count)</td> <td>从offset指定的位置开始删除count个字符</td> </tr> <tr> <td>insertData(offset,text)</td> <td>从offset指定的位置插入text</td> </tr> <tr> <td>replaceData(offset,count,text)</td> <td>用text替换从offset指定的位置开始到offset+count为止处的文本</td> </tr> <tr> <td>splitText(offset)</td> <td>从offset指定的位置将当前文本节点分成两个文本节点</td> </tr> <tr> <td>substringData(offset,count)</td> <td>提取从offset指定的位置开始到offset+count为止处的字符串</td> </tr> </tbody> </table> <p>说明:</p> <p>(1)在Node类型中定义了一个normalize()方法,用于将相邻的两个或多个文本子节点合并,需要注意的是这个方法需要在文本节点的父节点上调用;与之相反的是,Text类型提供了splitText()方法,它会将原文本节点分成两个文本节点,原文本节点将包含从开始到指定位置之前的内容,新文本节点包含剩下的内容,最终返回新文本节点。</p> <p>(2)默认情况下,每个可以包含内容的元素最多只能有一个文本子节点,而且文本不能为空。通过DOM脚本操作时,可能存在有多个文件子节点的情况。</p> <p>(3)设置文本节点时需要注意,字符串会经过HTML或XML编码。</p> <p>7、DocumentFragment类型</p> <p>  在所有节点类型中,只有DocumentFragment是没有对应的标记的,DOM规定DocumentFragment是一种“轻量级”的文档,可以包含和控制节点,但不会像完整的文档那样占用额外的资源。DocumentFragment类型可以作为一个容器来使用,可以把后面要对文档进行的添加、修改、移除等操作先对DocumentFragment进行,然后再将DocumentFragment添加至文档中,从而避免DOM视图的多次渲染。例如:</p> <div class="cnblogs_code"> <pre><span style="color: #0000ff;">function</span><span style="color: #000000;"> addItems(){ </span><span style="color: #0000ff;">var</span> fragment = document.createDocumentFragment();<span style="color: #008000;">//</span><span style="color: #008000;">创建一个文档片段作为容器</span> <span style="color: #0000ff;">var</span> ul = document.getElementById("myList"<span style="color: #000000;">); </span><span style="color: #0000ff;">var</span> li = <span style="color: #0000ff;">null</span><span style="color: #000000;">; </span><span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">var</span> i=0; i < 3; i++<span style="color: #000000;">){ li </span>= document.createElement("li");<span style="color: #008000;">//</span><span style="color: #008000;">创建列表元素</span> li.appendChild(document.createTextNode("Item " + (i+1)));<span style="color: #008000;">//</span><span style="color: #008000;">在列表元素中添加文本</span> fragment.appendChild(li);<span style="color: #008000;">//</span><span style="color: #008000;">将列表元素添加中容器中,此时不会渲染页面</span> <span style="color: #000000;"> } ul.appendChild(fragment); </span><span style="color: #008000;">//将容器中的节点添加到文档中(但容器本身不会添加至文档树),这样只需要</span><span style="color: #008000;">渲染一次页面 </span> }</pre> </div> <p>需要注意的是,在DocumentFragment中的节点不属于文档,如果将文本中的节点添加至DocumentFragment中,该节点将会从文档树中移除。</p> <p>8、操作表格</p> <p>  <table>元素是HTML中最复杂的结构之一,在HTML DOM中还为<table>、<tbody>、<tr>等元素添加了一些属性和方法(请注意table、tbody、tr及td之间的关系):</p> <table class="cnblogs_code" border="1"> <tbody> <tr> <td>元素</td> <td>类别</td> <td>属性/方法</td> <td>说明</td> </tr> <tr> <td rowspan="13"><table></td> <td rowspan="5">属性</td> <td>caption</td> <td>保存着对<caption>元素(如果有)的指针</td> </tr> <tr> <td>tBodies</td> <td>是一个<tbody>元素的HTMLCollection</td> </tr> <tr> <td>tHead</td> <td>保存着对<thead>元素(如果有)的指针</td> </tr> <tr> <td>tFoot</td> <td><span>保存着对<tfoot>元素(如果有)的指针</span></td> </tr> <tr> <td>rows</td> <td>表格中所有行的HTMLCollection</td> </tr> <tr> <td rowspan="8">方法</td> <td>createTHead()</td> <td>创建<thead>元素,将其放到表格中,返回引用</td> </tr> <tr> <td>createTFoot()</td> <td>创建<tfoot>元素,将其放到表格中,返回引用</td> </tr> <tr> <td>createCaption()</td> <td>创建<caption>元素,将其放到表格中,返回引用</td> </tr> <tr> <td>deleteTHead()</td> <td>删除<thead>元素</td> </tr> <tr> <td>deleteTFoot()</td> <td>删除<tfoot>元素</td> </tr> <tr> <td>deleteCaption()</td> <td>删除<caption>元素</td> </tr> <tr> <td>deleteRow(pos)</td> <td>删除指定位置的行</td> </tr> <tr> <td>insertRow(pos)</td> <td>向rows集合中的指定位置插入一行</td> </tr> <tr> <td rowspan="3"><tbody></td> <td>属性</td> <td>rows</td> <td>保存着<tbody>元素中行的HTMLCollection</td> </tr> <tr> <td rowspan="2">方法</td> <td>deleteRow(pos)</td> <td>删除指定位置的行</td> </tr> <tr> <td>insertRow(pos)</td> <td>向rows集合中的指定位置插入一行,返回新插入行的引用</td> </tr> <tr> <td rowspan="3"><tr></td> <td>属性</td> <td>cells</td> <td>保存着<tr>元素中单元格的HTMLCollection</td> </tr> <tr> <td rowspan="2">方法</td> <td>deleteCell(pos)</td> <td>删除指定位置的单元格</td> </tr> <tr> <td>insertCell(pos)</td> <td>想cells集合中的指定位置插入一个单元格,返回新插入单元格的引用</td> </tr> </tbody> </table> <p>注意,上表中列出的是原书中提及元素的属性和方法,并不全面,比如对应<td>元素还有HTMLTableCellElement对象,而<tr>对应对象还有rowIndex属性等,实际使用时可以查阅相关的DOM参考手册。这里旨在通过主要的一些属性和方法明确概念,而非参考大全。</p> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1180022349655756800"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(JavaScript高级程序设计(第3版)学习笔记15——DOM基础)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1950233072825856000.htm" title="三菱PLC全套学习资料及应用手册" target="_blank">三菱PLC全套学习资料及应用手册</a> <span class="text-muted">good2know</span> <div>本文还有配套的精品资源,点击获取简介:三菱PLC作为工业自动化领域的核心设备,其系列产品的学习和应用需要全面深入的知识。本次资料包为学习者提供从基础到进阶的全方位学习资源,包括各种型号PLC的操作手册、编程指南、软件操作教程以及实际案例分析,旨在帮助用户系统掌握PLC的编程语言、指令系统及在各类工业应用中的实施。1.三菱PLC基础知识入门1.1PLC的基本概念可编程逻辑控制器(PLC)是工业自动化</div> </li> <li><a href="/article/1950232820773351424.htm" title="移动端城市区县二级联动选择功能实现包" target="_blank">移动端城市区县二级联动选择功能实现包</a> <span class="text-muted">good2know</span> <div>本文还有配套的精品资源,点击获取简介:本项目是一套为移动端设计的jQuery实现方案,用于简化用户在选择城市和区县时的流程。它包括所有必需文件:HTML、JavaScript、CSS及图片资源。通过动态更新下拉菜单选项,实现城市到区县的联动效果,支持数据异步加载。开发者可以轻松集成此功能到移动网站或应用,并可基于需求进行扩展和优化。1.jQuery移动端解决方案概述jQuery技术简介jQuery</div> </li> <li><a href="/article/1950232781174927360.htm" title="15个小技巧,让我的Windows电脑更好用了!" target="_blank">15个小技巧,让我的Windows电脑更好用了!</a> <span class="text-muted">曹元_</span> <div>01.桌面及文档处理第一部分的技巧,主要是围绕桌面的一些基本操作,包括主题设置、常用文档文件快捷打开的多种方式等等。主题换色默认情况下,我们的Win界面可能就是白色的文档界面,天蓝色的图表背景,说不出哪里不好看,但是就是觉得不够高级。imageimage说到高级感,本能第一反应就会和暗色模式联想起来,如果我们将整个界面换成黑夜模式的话,它会是这样的。imageimage更改主题颜色及暗色模式,我们</div> </li> <li><a href="/article/1950232190038110208.htm" title="day15|前端框架学习和算法" target="_blank">day15|前端框架学习和算法</a> <span class="text-muted">universe_01</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a> <div>T22括号生成先把所有情况都画出来,然后(在满足什么情况下)把不符合条件的删除。T78子集要画树状图,把思路清晰。可以用暴力法、回溯法和DFS做这个题DFS深度搜索:每个边都走完,再回溯应用:二叉树搜索,图搜索回溯算法=DFS+剪枝T200岛屿数量(非常经典BFS宽度把树状转化成队列形式,lambda匿名函数“一次性的小函数,没有名字”setup语法糖:让代码更简洁好写的语法ref创建:基本类型的</div> </li> <li><a href="/article/1950231381485350912.htm" title="《极简思维》第三部分" target="_blank">《极简思维》第三部分</a> <span class="text-muted">小洋苏兮</span> <div>整理你的人际关系如何改善人际关系?摘录:因为人际关系问题是人们生活中不快乐的主要原因。感想:感觉这个说的挺对,之前我总是埋头学习,不管舍友不管自己的合作伙伴的一些事情,但实际上,这学期关注了之后好多了摘录:“亲密关系与社交会让你健康而快乐。这是基础。太过于关注成就或不太关心人际关系的人都不怎么快乐。基本上来说,人类就是建立在人脉关系上的。”感想:但是如果有时想的太多就不太好,要以一个开放的心态跟别</div> </li> <li><a href="/article/1950228031524106240.htm" title="Spring进阶 - SpringMVC实现原理之DispatcherServlet处理请求的过程" target="_blank">Spring进阶 - SpringMVC实现原理之DispatcherServlet处理请求的过程</a> <span class="text-muted">倾听铃的声</span> <a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/mvc/1.htm">mvc</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a> <div>前文我们有了IOC的源码基础以及SpringMVC的基础,我们便可以进一步深入理解SpringMVC主要实现原理,包含DispatcherServlet的初始化过程和DispatcherServlet处理请求的过程的源码解析。本文是第二篇:DispatcherServlet处理请求的过程的源码解析。@pdaiSpring进阶-SpringMVC实现原理之DispatcherServlet处理请求的</div> </li> <li><a href="/article/1950226517397139456.htm" title="JVM 内存模型深度解析:原子性、可见性与有序性的实现" target="_blank">JVM 内存模型深度解析:原子性、可见性与有序性的实现</a> <span class="text-muted">练习时长两年半的程序员小胡</span> <a class="tag" taget="_blank" href="/search/JVM/1.htm">JVM</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%89%96%E6%9E%90%EF%BC%9A%E4%BB%8E%E9%9D%A2%E8%AF%95%E8%80%83%E7%82%B9%E5%88%B0%E7%94%9F%E4%BA%A7%E5%AE%9E%E8%B7%B5/1.htm">深度剖析:从面试考点到生产实践</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%86%85%E5%AD%98%E6%A8%A1%E5%9E%8B/1.htm">内存模型</a> <div>在了解了JVM的基础架构和类加载机制后,我们需要进一步探索Java程序在多线程环境下的内存交互规则。JVM内存模型(JavaMemoryModel,JMM)定义了线程和主内存之间的抽象关系,它通过规范共享变量的访问方式,解决了多线程并发时的数据一致性问题。本文将从内存模型的核心目标出发,详解原子性、可见性、有序性的实现机制,以及volatile、synchronized等关键字在其中的作用。一、J</div> </li> <li><a href="/article/1950226390070652928.htm" title="Flowable 高级扩展:自定义元素与性能优化实战" target="_blank">Flowable 高级扩展:自定义元素与性能优化实战</a> <span class="text-muted">练习时长两年半的程序员小胡</span> <a class="tag" taget="_blank" href="/search/Flowable/1.htm">Flowable</a><a class="tag" taget="_blank" href="/search/%E6%B5%81%E7%A8%8B%E5%BC%95%E6%93%8E%E5%AE%9E%E6%88%98%E6%8C%87%E5%8D%97/1.htm">流程引擎实战指南</a><a class="tag" taget="_blank" href="/search/%E6%B5%81%E7%A8%8B%E5%9B%BE/1.htm">流程图</a><a class="tag" taget="_blank" href="/search/flowable/1.htm">flowable</a><a class="tag" taget="_blank" href="/search/BPMN/1.htm">BPMN</a><a class="tag" taget="_blank" href="/search/%E6%B5%81%E7%A8%8B%E5%BC%95%E6%93%8E/1.htm">流程引擎</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>在前五篇文章中,我们从基础概念、流程设计、API实战、SpringBoot集成,到外部系统协同,逐步构建了Flowable的应用体系。但企业级复杂场景中,原生功能往往难以满足定制化需求——比如需要特殊的审批规则网关、与决策引擎联动实现动态路由,或是在高并发场景下优化流程引擎性能。本文将聚焦Flowable的高级扩展能力,详解如何自定义流程元素、集成规则引擎,并掌握大型系统中的性能调优策略。一、自定</div> </li> <li><a href="/article/1950226137909096448.htm" title="互信息:理论框架、跨学科应用与前沿进展" target="_blank">互信息:理论框架、跨学科应用与前沿进展</a> <span class="text-muted">大千AI助手</span> <a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/OTHER/1.htm">OTHER</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E4%BA%92%E4%BF%A1%E6%81%AF/1.htm">互信息</a><a class="tag" taget="_blank" href="/search/%E9%A6%99%E5%86%9C/1.htm">香农</a><a class="tag" taget="_blank" href="/search/%E9%80%9A%E4%BF%A1/1.htm">通信</a><a class="tag" taget="_blank" href="/search/%E9%9A%8F%E6%9C%BA%E5%8F%98%E9%87%8F/1.htm">随机变量</a> <div>1.起源与核心定义互信息(MutualInformation,MI)由克劳德·香农(ClaudeShannon)在1948年开创性论文《AMathematicalTheoryofCommunication》中首次提出,该论文奠定了现代信息论的基础。互信息用于量化两个随机变量之间的统计依赖关系,定义为:若已知一个随机变量的取值,能为另一个随机变量提供的信息量。数学上,对于离散随机变量XXX和YYY,</div> </li> <li><a href="/article/1950225255557558272.htm" title="力扣面试题07 - 旋转矩阵" target="_blank">力扣面试题07 - 旋转矩阵</a> <span class="text-muted">茶猫_</span> <a class="tag" taget="_blank" href="/search/leetcode/1.htm">leetcode</a><a class="tag" taget="_blank" href="/search/%E7%9F%A9%E9%98%B5/1.htm">矩阵</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a> <div>题目:给你一幅由N×N矩阵表示的图像,其中每个像素的大小为4字节。请你设计一种算法,将图像旋转90度。不占用额外内存空间能否做到?示例1:给定matrix=[[1,2,3],[4,5,6],[7,8,9]],原地旋转输入矩阵,使其变为:[[7,4,1],[8,5,2],[9,6,3]]示例2:给定matrix=[[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,</div> </li> <li><a href="/article/1950224745421139968.htm" title="车载刷写架构 --- 刷写思考扩展" target="_blank">车载刷写架构 --- 刷写思考扩展</a> <span class="text-muted">汽车电子实验室</span> <a class="tag" taget="_blank" href="/search/%E7%94%B5%E5%AD%90%E7%94%B5%E5%99%A8%E6%9E%B6%E6%9E%84%E2%80%94%E2%80%94%E5%88%B7%E5%86%99%E6%96%B9%E6%A1%88/1.htm">电子电器架构——刷写方案</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E5%85%B3%E4%BA%8E%E7%BD%91%E5%85%B3%E8%BD%AC%E5%8F%91%E6%80%A7%E8%83%BD%E5%BC%95%E8%B5%B7%E7%9A%84%E6%80%9D%E8%80%83/1.htm">关于网关转发性能引起的思考</a><a class="tag" taget="_blank" href="/search/%E6%B1%BD%E8%BD%A6%E4%B8%AD%E5%A4%AE%E6%8E%A7%E5%88%B6%E5%8D%95%E5%85%83HPC%E8%BD%AF%E4%BB%B6%E6%9E%B6%E6%9E%84/1.htm">汽车中央控制单元HPC软件架构</a><a class="tag" taget="_blank" href="/search/%E8%BD%A6%E8%BD%BD%E8%AF%8A%E6%96%AD%E8%BF%9B%E9%98%B6%E7%AF%87/1.htm">车载诊断进阶篇</a> <div>我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师:做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是系统思考、大胆设计、小心求证;三是“一张纸制度”,也就是无论多么复杂的工作内容,要在一张纸上描述清楚;四是要坚决反对虎头蛇尾,反对繁文缛节,反对老</div> </li> <li><a href="/article/1950222852074565632.htm" title="2025年SDK游戏盾终极解析:重新定义手游安全的“隐形护甲”" target="_blank">2025年SDK游戏盾终极解析:重新定义手游安全的“隐形护甲”</a> <span class="text-muted">上海云盾商务经理杨杨</span> <a class="tag" taget="_blank" href="/search/%E6%B8%B8%E6%88%8F/1.htm">游戏</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a> <div>副标题:从客户端加密到AI反外挂,拆解全链路防护如何重塑游戏攻防天平引言:当传统高防在手游战场“失效”2025年全球手游市场规模突破$2000亿,黑客单次攻击成本却降至$30——某SLG游戏因协议层CC攻击单日流失37%玩家,某开放世界游戏遭低频DDoS瘫痪6小时损失千万。传统高防IP的致命短板暴露无遗:无法识别伪造客户端流量、难防协议篡改、误杀率超15%。而集成于游戏终端的SDK游戏盾,正以“源</div> </li> <li><a href="/article/1950214964396486656.htm" title="js操作样式" target="_blank">js操作样式</a> <span class="text-muted">郝加升</span> <div>DOM样式属性和方法:指定的元素,它的style有这么几个属性和方法:cssText:通过这个属性可以访问到元素的特性style设置的属性,并且可以直接赋值设置。removeProperty(属性名称):从样式中删除给定属性。setProperty(属性名称,值,权重):可以通过这个方法设置给定样式的同时设置其权重,可以传入”important”或者一个空字符串。获取计算后样式:window.ge</div> </li> <li><a href="/article/1950214200206880768.htm" title="《自控力》P158" target="_blank">《自控力》P158</a> <span class="text-muted">迷糊笑</span> <div>作者:凯利•麦格尼格尔图片发自App金句:众多研究显示,自我批评会降低积极性和自控力,而且也是最容易导致抑郁的因素。它不仅耗尽了“我要做”的力量,还耗尽了“我想要”的力量。相反,自我同情则会提升积极性和自控力,比如,在压力和挫折面前支持自己、对自己好一些。感想:我当年抑郁是不是也是因为这样?图片发自App</div> </li> <li><a href="/article/1950213053488361472.htm" title="19.07.13" target="_blank">19.07.13</a> <span class="text-muted">aa350fd4409a</span> <div>晚上在路边加资源的时候碰到了丁姐,那时候我才加了十个,丁姐已经加了15个。丁姐直接说要陪我一起加。然后我下意识反应就说“好”然后我们就一起加了,丁姐陪我加资源加到八点半,期间总是鼓励我说你真棒,你真棒,你真棒,在丁姐的鼓励下,我加到了15个。然后丁姐本来七点半就可以回去了的,然后我们回到馆里的时候,馆里门都关了。也是晚上才知道钥匙就会放在消防栓那里。今天在西湖文化广场那边加的资源质量不是很高。</div> </li> <li><a href="/article/1950212544937390080.htm" title="2018-10-15" target="_blank">2018-10-15</a> <span class="text-muted">麋鹿含</span> <div>妈妈让我挑一副最好的画,参加两岸少儿书画大赛。妈妈把我的画全拿过来,妈妈说你全摆着把入册的和没有入册的分开摆。我横着的放一排,我把竖着的放一排,画太多了我实在是太累了,我都出汗了。我感觉孔雀最好看,我就拿他参加比赛了。</div> </li> <li><a href="/article/1950206970766094336.htm" title="C++编程基础与面向对象概念解析" target="_blank">C++编程基础与面向对象概念解析</a> <span class="text-muted">侯昂</span> <a class="tag" taget="_blank" href="/search/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%BC%96%E7%A8%8B/1.htm">面向对象编程</a><a class="tag" taget="_blank" href="/search/C%2B%2B%E8%AF%AD%E6%B3%95/1.htm">C++语法</a><a class="tag" taget="_blank" href="/search/%E5%87%BD%E6%95%B0/1.htm">函数</a><a class="tag" taget="_blank" href="/search/%E7%B1%BB%E4%B8%8E%E5%AF%B9%E8%B1%A1/1.htm">类与对象</a><a class="tag" taget="_blank" href="/search/%E7%BB%A7%E6%89%BF%E4%B8%8E%E5%A4%9A%E6%80%81%E6%80%A7/1.htm">继承与多态性</a> <div>C++编程基础与面向对象概念解析背景简介C++是一种广泛使用的面向对象编程语言,它允许开发者创建高效、灵活且功能强大的程序。本文基于《C++Primer》一书的章节内容,深入解析C++的核心概念和面向对象编程原则,旨在帮助读者构建扎实的C++编程基础。面向对象编程的原则软件危机与进化介绍了软件危机的产生和软件进化的必要性,强调了面向对象编程(OOP)在应对这些问题中的优势。面向对象编程范式讨论了面</div> </li> <li><a href="/article/1950205081676738560.htm" title="K8s常用的命令" target="_blank">K8s常用的命令</a> <span class="text-muted">尚未来-</span> <a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/k8s/1.htm">k8s</a> <div>一、基础命令查看集群信息bashkubectlcluster-info#显示集群端点和服务信息查看节点bashkubectlgetnodes#列出所有节点kubectldescribenode#查看节点详细信息查看命名空间bashkubectlgetnamespaces#列出所有命名空间切换命名空间bashkubectlconfigset-context--current--namespace=二</div> </li> <li><a href="/article/1950205032758571008.htm" title="51晨间日记" target="_blank">51晨间日记</a> <span class="text-muted">讨喜的鱼</span> <div>2018年11月15日,马上一个月又过去一半,离过年也不远。每到这个时候,心底总有些焦虑。是不是又像去年一样的场景,没赚什么钱,还是一无所有。再有没有以前的潇洒,一无所有,一身轻松,身上有些东西一旦背负,就卸不掉。今天比预计的时间,晚了两个小时,原来说服自己是这么简单的事,告诉自己多睡10分钟。一睁眼,已经过了2小时,这是常有的事。自律必须时刻警惕,而懒惰是要打个盹。工作的话,最近还算顺利。天天写</div> </li> <li><a href="/article/1950205034075582464.htm" title="《感官品牌》读书笔记 1" target="_blank">《感官品牌》读书笔记 1</a> <span class="text-muted">西红柿阿达</span> <div>原文:最近我在东京街头闲逛时,与一位女士擦肩而过,我发现她的香水味似曾相识。“哗”的一下,记亿和情感立刻像潮水般涌了出来。这个香水味把我带回了15年前上高中的时候,我的一位亲密好友也是用这款香水。一瞬间,我呆站在那里,东京的街景逐渐淡出,取而代之的是我年少时的丹麦以及喜悦、悲伤、恐惧、困惑的记忆。我被这熟悉的香水味征服了。感想:感官是有记忆的,你所听到,看到,闻到过的有代表性的事件都会在大脑中深深</div> </li> <li><a href="/article/1950204954295726080.htm" title="Anaconda 和 Miniconda:功能详解与选择建议" target="_blank">Anaconda 和 Miniconda:功能详解与选择建议</a> <span class="text-muted">古月฿</span> <a class="tag" taget="_blank" href="/search/python%E5%85%A5%E9%97%A8/1.htm">python入门</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/conda/1.htm">conda</a> <div>Anaconda和Miniconda详细介绍一、Anaconda的详细介绍1.什么是Anaconda?Anaconda是一个开源的包管理和环境管理工具,在数据科学、机器学习以及科学计算领域发挥着关键作用。它以Python和R语言为基础,为用户精心准备了大量预装库和工具,极大地缩短了搭建数据科学环境的时间。对于那些想要快速开展数据分析、模型训练等工作的人员来说,Anaconda就像是一个一站式的“数</div> </li> <li><a href="/article/1950202054219722752.htm" title="Pandas:数据科学的超级瑞士军刀" target="_blank">Pandas:数据科学的超级瑞士军刀</a> <span class="text-muted">科技林总</span> <a class="tag" taget="_blank" href="/search/DeepSeek%E5%AD%A6AI/1.htm">DeepSeek学AI</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a> <div>**——从零基础到高效分析的进化指南**###**一、Pandas诞生:数据革命的救世主****2010年前的数据分析噩梦**:```python#传统Python处理表格数据data=[]forrowincsv_file:ifrow[3]>100androw[2]=="China":data.append(float(row[5])#代码冗长易错!```**核心痛点**:-Excel处理百万行崩</div> </li> <li><a href="/article/1950201675297910784.htm" title="大数据之路:阿里巴巴大数据实践——大数据领域建模综述" target="_blank">大数据之路:阿里巴巴大数据实践——大数据领域建模综述</a> <span class="text-muted"></span> <div>为什么需要数据建模核心痛点数据冗余:不同业务重复存储相同数据(如用户基础信息),导致存储成本激增。计算资源浪费:未经聚合的明细数据直接参与计算(如全表扫描),消耗大量CPU/内存资源。数据一致性缺失:同一指标在不同业务线的口径差异(如“活跃用户”定义不同),引发决策冲突。开发效率低下:每次分析需重新编写复杂逻辑,无法复用已有模型。数据建模核心价值性能提升:分层设计(ODS→DWD→DWS→ADS)</div> </li> <li><a href="/article/1950200667587014656.htm" title="学C++的五大惊人好处" target="_blank">学C++的五大惊人好处</a> <span class="text-muted"></span> <div>为什么要学c++学c++有什么用学习c++的好处有1.中考可以加分2.高考可能直接录取3.就业广且工资高4.在未来30--50年c++一定是一个很受欢迎的职业5.c++成功的例子deepsick等AI智能C++语言兼备编程效率和编译运行效率的语言C++语言是C语言功能增强版,在c语言的基础上添加了面向对象编程和泛型编程的支持既继承了C语言高效,简洁,快速和可移植的传统,又具备类似Java、Go等其</div> </li> <li><a href="/article/1950200541233606656.htm" title="Android 基础知识:Android 应用权限详解" target="_blank">Android 基础知识:Android 应用权限详解</a> <span class="text-muted">流水mpc</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a> <div>这篇文章为大家系统的梳理一下Android权限相关的知识,在日常开发中,我们都用过权限,但是对于权限的一些细节我们可能掌握的还不够全面,这篇文章会全面的为大家介绍权限相关的知识。当然,本篇文章依然是参考了Google的官方文档:应用权限。本文目录一、认识Android权限(一)Android系统为什么需要权限?Android系统设置权限的目的是保护Android用户的隐私。对于用户的敏感数据And</div> </li> <li><a href="/article/1950200162810916864.htm" title="Selenium基础教程" target="_blank">Selenium基础教程</a> <span class="text-muted">lemontree1945</span> <a class="tag" taget="_blank" href="/search/selenium/1.htm">selenium</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/1.htm">测试工具</a> <div>1.Selenium环境安装1.1浏览器安装Chrome和ChromeDriver下载地址:https://googlechromelabs.github.io/chrome-for-testing/注意:驱动版本号要和浏览器版本号一致;安装后关闭浏览器自动更新:services.msc:打开系统服务找到和google相关的服务,全部修改为禁用1.2安装第三方库seleniumpipinstall</div> </li> <li><a href="/article/1950199910724857856.htm" title="机器学习必备数学与编程指南:从入门到精通" target="_blank">机器学习必备数学与编程指南:从入门到精通</a> <span class="text-muted">a小胡哦</span> <a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80/1.htm">机器学习基础</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a> <div>一、机器学习核心数学基础1.线性代数(神经网络的基础)必须掌握:矩阵运算(乘法、转置、逆)向量空间与线性变换特征值分解与奇异值分解(SVD)为什么重要:神经网络本质就是矩阵运算学习技巧:用NumPy实际操作矩阵运算2.概率与统计(模型评估的关键)核心概念:条件概率与贝叶斯定理概率分布(正态、泊松、伯努利)假设检验与p值应用场景:朴素贝叶斯、A/B测试3.微积分(优化算法的基础)重点掌握:导数与偏导</div> </li> <li><a href="/article/1950199278483861504.htm" title="Android 媒体播放开发完全指南" target="_blank">Android 媒体播放开发完全指南</a> <span class="text-muted">安卓开发者</span> <a class="tag" taget="_blank" href="/search/Android/1.htm">Android</a><a class="tag" taget="_blank" href="/search/Jetpack/1.htm">Jetpack</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/%E5%AA%92%E4%BD%93/1.htm">媒体</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>引言在当今移动应用生态中,媒体播放功能已成为许多应用的核心组成部分。无论是音乐流媒体应用、视频平台、播客客户端还是游戏应用,都需要强大的媒体播放能力。Android平台提供了丰富的API来支持各种媒体播放场景。本文将全面介绍Android媒体播放的开发技术,从基础到高级功能实现。一、Android媒体播放基础1.1支持的媒体格式Android原生支持多种媒体格式:音频:MP3、AAC、FLAC、W</div> </li> <li><a href="/article/1950199279641489408.htm" title="Android通知(Notification)全面解析:从基础到高级应用" target="_blank">Android通知(Notification)全面解析:从基础到高级应用</a> <span class="text-muted"></span> <div>一、Android通知概述通知(Notification)是Android系统中用于在应用之外向用户传递信息的重要机制。当应用需要告知用户某些事件或信息时,可以通过通知在状态栏显示图标,用户下拉通知栏即可查看详细信息。这种机制几乎被所有现代应用采用,用于推送新闻、消息、广告等内容3。与Toast相比,Notification的优势在于:可以长时间停留在通知栏,适合内容较多且需要持久展示的信息支持丰</div> </li> <li><a href="/article/1950196906563006464.htm" title="Unity学习笔记1" target="_blank">Unity学习笔记1</a> <span class="text-muted">zy_777</span> <div>通过一个星期的简单学习,初步了解了下unity,unity的使用,以及场景的布局,UI,以及用C#做一些简单的逻辑。好记性不如烂笔头,一些关键帧还是记起来比较好,哈哈,不然可能转瞬即逝了,(PS:纯小白观点,unity大神可以直接忽略了)一:MonoBehaviour类的初始化1,Instantiate()创建GameObject2,通过Awake()和Start()来做初始化3,Update、L</div> </li> <li><a href="/article/61.htm" title="Enum用法" target="_blank">Enum用法</a> <span class="text-muted">不懂事的小屁孩</span> <a class="tag" taget="_blank" href="/search/enum/1.htm">enum</a> <div>以前的时候知道enum,但是真心不怎么用,在实际开发中,经常会用到以下代码: protected final static String XJ = "XJ"; protected final static String YHK = "YHK"; protected final static String PQ = "PQ"; </div> </li> <li><a href="/article/188.htm" title="【Spark九十七】RDD API之aggregateByKey" target="_blank">【Spark九十七】RDD API之aggregateByKey</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/spark/1.htm">spark</a> <div>1. aggregateByKey的运行机制   /** * Aggregate the values of each key, using given combine functions and a neutral "zero value". * This function can return a different result type</div> </li> <li><a href="/article/315.htm" title="hive创建表是报错: Specified key was too long; max key length is 767 bytes" target="_blank">hive创建表是报错: Specified key was too long; max key length is 767 bytes</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/hive/1.htm">hive</a> <div>今天在hive客户端创建表时报错,具体操作如下   hive> create table test2(id string); FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:javax.jdo.JDODataSto</div> </li> <li><a href="/article/442.htm" title="Map 与 JavaBean之间的转换" target="_blank">Map 与 JavaBean之间的转换</a> <span class="text-muted">周凡杨</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E7%9C%81/1.htm">自省</a><a class="tag" taget="_blank" href="/search/%E8%BD%AC%E6%8D%A2/1.htm">转换</a><a class="tag" taget="_blank" href="/search/%E5%8F%8D%E5%B0%84/1.htm">反射</a> <div> 最近项目里需要一个工具类,它的功能是传入一个Map后可以返回一个JavaBean对象。很喜欢写这样的Java服务,首先我想到的是要通过Java 的反射去实现匿名类的方法调用,这样才可以把Map里的值set 到JavaBean里。其实这里用Java的自省会更方便,下面两个方法就是一个通过反射,一个通过自省来实现本功能。 1:JavaBean类 1 &nb</div> </li> <li><a href="/article/569.htm" title="java连接ftp下载" target="_blank">java连接ftp下载</a> <span class="text-muted">g21121</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>有的时候需要用到java连接ftp服务器下载,上传一些操作,下面写了一个小例子。 /** ftp服务器地址 */ private String ftpHost; /** ftp服务器用户名 */ private String ftpName; /** ftp服务器密码 */ private String ftpPass; /** ftp根目录 */ private String f</div> </li> <li><a href="/article/696.htm" title="web报表工具FineReport使用中遇到的常见报错及解决办法(二)" target="_blank">web报表工具FineReport使用中遇到的常见报错及解决办法(二)</a> <span class="text-muted">老A不折腾</span> <a class="tag" taget="_blank" href="/search/finereport/1.htm">finereport</a><a class="tag" taget="_blank" href="/search/web%E6%8A%A5%E8%A1%A8/1.htm">web报表</a><a class="tag" taget="_blank" href="/search/java%E6%8A%A5%E8%A1%A8/1.htm">java报表</a><a class="tag" taget="_blank" href="/search/%E6%80%BB%E7%BB%93/1.htm">总结</a> <div>  抛砖引玉,希望大家能把自己整理的问题及解决方法晾出来,Mark一下,利人利己。   出现问题先搜一下文档上有没有,再看看度娘有没有,再看看论坛有没有。有报错要看日志。下面简单罗列下常见的问题,大多文档上都有提到的。   1、没有返回数据集: 在存储过程中的操作语句之前加上set nocount on 或者在数据集exec调用存储过程的前面加上这句。当S</div> </li> <li><a href="/article/823.htm" title="linux 系统cpu 内存等信息查看" target="_blank">linux 系统cpu 内存等信息查看</a> <span class="text-muted">墙头上一根草</span> <a class="tag" taget="_blank" href="/search/cpu/1.htm">cpu</a><a class="tag" taget="_blank" href="/search/%E5%86%85%E5%AD%98/1.htm">内存</a><a class="tag" taget="_blank" href="/search/liunx/1.htm">liunx</a> <div>1 查看CPU   1.1 查看CPU个数   # cat /proc/cpuinfo | grep "physical id" | uniq | wc -l   2   **uniq命令:删除重复行;wc –l命令:统计行数**   1.2 查看CPU核数   # cat /proc/cpuinfo | grep "cpu cores" | u</div> </li> <li><a href="/article/950.htm" title="Spring中的AOP" target="_blank">Spring中的AOP</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/AOP/1.htm">AOP</a> <div>  Spring中的AOP Written by Tony Jiang @ 2012-1-18 (转)何为AOP AOP,面向切面编程。 在不改动代码的前提下,灵活的在现有代码的执行顺序前后,添加进新规机能。 来一个简单的Sample: 目标类: [java]  view plain copy print ? package&nb</div> </li> <li><a href="/article/1077.htm" title="placeholder(HTML 5) IE 兼容插件" target="_blank">placeholder(HTML 5) IE 兼容插件</a> <span class="text-muted">alxw4616</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/jquery+jQuery%E6%8F%92%E4%BB%B6/1.htm">jquery jQuery插件</a> <div>placeholder 这个属性被越来越频繁的使用. 但为做HTML 5 特性IE没能实现这东西. 以下的jQuery插件就是用来在IE上实现该属性的. /** * [placeholder(HTML 5) IE 实现.IE9以下通过测试.] * v 1.0 by oTwo 2014年7月31日 11:45:29 */ $.fn.placeholder = function</div> </li> <li><a href="/article/1204.htm" title="Object类,值域,泛型等总结(适合有基础的人看)" target="_blank">Object类,值域,泛型等总结(适合有基础的人看)</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/%E6%B3%9B%E5%9E%8B%E7%9A%84%E7%BB%A7%E6%89%BF%E5%92%8C%E9%80%9A%E9%85%8D%E7%AC%A6/1.htm">泛型的继承和通配符</a><a class="tag" taget="_blank" href="/search/%E5%8F%98%E9%87%8F%E7%9A%84%E5%80%BC%E5%9F%9F/1.htm">变量的值域</a><a class="tag" taget="_blank" href="/search/Object%E7%B1%BB%E8%BD%AC%E6%8D%A2/1.htm">Object类转换</a> <div>java的作用域在编程的时候经常会遇到,而我经常会搞不清楚这个 问题,所以在家的这几天回忆一下过去不知道的每个小知识点   变量的值域;   package 基础; /** * 作用域的范围 * * @author Administrator * */ public class zuoyongyu { public static vo</div> </li> <li><a href="/article/1331.htm" title="JDK1.5 Condition接口" target="_blank">JDK1.5 Condition接口</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/thread/1.htm">thread</a><a class="tag" taget="_blank" href="/search/Condition/1.htm">Condition</a><a class="tag" taget="_blank" href="/search/java%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">java多线程</a> <div>Condition 将 Object 监视器方法(wait、notify和 notifyAll)分解成截然不同的对象,以便通过将这些对象与任意 Lock 实现组合使用,为每个对象提供多个等待 set (wait-set)。其中,Lock 替代了 synchronized 方法和语句的使用,Condition 替代了 Object 监视器方法的使用。 条件(也称为条件队列或条件变量)为线程提供了一</div> </li> <li><a href="/article/1458.htm" title="开源中国OSC源创会记录" target="_blank">开源中国OSC源创会记录</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a><a class="tag" taget="_blank" href="/search/spark/1.htm">spark</a><a class="tag" taget="_blank" href="/search/MemSQL/1.htm">MemSQL</a> <div>一.Strata+Hadoop World(SHW)大会         是全世界最大的大数据大会之一。SHW大会为各种技术提供了深度交流的机会,还会看到最领先的大数据技术、最广泛的应用场景、最有趣的用例教学以及最全面的大数据行业和趋势探讨。          二.Hadoop   &nbs</div> </li> <li><a href="/article/1585.htm" title="【Java范型七】范型消除" target="_blank">【Java范型七】范型消除</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>范型是Java1.5引入的语言特性,它是编译时的一个语法现象,也就是说,对于一个类,不管是范型类还是非范型类,编译得到的字节码是一样的,差别仅在于通过范型这种语法来进行编译时的类型检查,在运行时是没有范型或者类型参数这个说法的。 范型跟反射刚好相反,反射是一种运行时行为,所以编译时不能访问的变量或者方法(比如private),在运行时通过反射是可以访问的,也就是说,可见性也是一种编译时的行为,在</div> </li> <li><a href="/article/1712.htm" title="【Spark九十四】spark-sql工具的使用" target="_blank">【Spark九十四】spark-sql工具的使用</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/spark/1.htm">spark</a> <div>spark-sql是Spark bin目录下的一个可执行脚本,它的目的是通过这个脚本执行Hive的命令,即原来通过 hive>输入的指令可以通过spark-sql>输入的指令来完成。 spark-sql可以使用内置的Hive metadata-store,也可以使用已经独立安装的Hive的metadata store   关于Hive build into Spark</div> </li> <li><a href="/article/1839.htm" title="js做的各种倒计时" target="_blank">js做的各种倒计时</a> <span class="text-muted">ronin47</span> <a class="tag" taget="_blank" href="/search/js+%E5%80%92%E8%AE%A1%E6%97%B6/1.htm">js 倒计时</a> <div> 第一种:精确到秒的javascript倒计时代码      HTML代码:   <form name="form1">   <div align="center" align="middle"</div> </li> <li><a href="/article/1966.htm" title="java-37.有n 个长为m+1 的字符串,如果某个字符串的最后m 个字符与某个字符串的前m 个字符匹配,则两个字符串可以联接" target="_blank">java-37.有n 个长为m+1 的字符串,如果某个字符串的最后m 个字符与某个字符串的前m 个字符匹配,则两个字符串可以联接</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div> public class MaxCatenate { /* * Q.37 有n 个长为m+1 的字符串,如果某个字符串的最后m 个字符与某个字符串的前m 个字符匹配,则两个字符串可以联接, * 问这n 个字符串最多可以连成一个多长的字符串,如果出现循环,则返回错误。 */ public static void main(String[] args){</div> </li> <li><a href="/article/2093.htm" title="mongoDB安装" target="_blank">mongoDB安装</a> <span class="text-muted">开窍的石头</span> <a class="tag" taget="_blank" href="/search/mongodb%E5%AE%89%E8%A3%85+%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C/1.htm">mongodb安装 基本操作</a> <div>mongoDB的安装          1:mongoDB下载   https://www.mongodb.org/downloads         2:下载mongoDB下载后解压     </div> </li> <li><a href="/article/2220.htm" title="[开源项目]引擎的关键意义" target="_blank">[开源项目]引擎的关键意义</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE/1.htm">开源项目</a> <div>      一个系统,最核心的东西就是引擎。。。。。       而要设计和制造出引擎,最关键的是要坚持。。。。。。       现在最先进的引擎技术,也是从莱特兄弟那里出现的,但是中间一直没有断过研发的    </div> </li> <li><a href="/article/2347.htm" title="软件度量的一些方法" target="_blank">软件度量的一些方法</a> <span class="text-muted">cuiyadll</span> <a class="tag" taget="_blank" href="/search/%E6%96%B9%E6%B3%95/1.htm">方法</a> <div>软件度量的一些方法http://cuiyingfeng.blog.51cto.com/43841/6775/在前面我们已介绍了组成软件度量的几个方面。在这里我们将先给出关于这几个方面的一个纲要介绍。在后面我们还会作进一步具体的阐述。当我们不从高层次的概念级来看软件度量及其目标的时候,我们很容易把这些活动看成是不同而且毫不相干的。我们现在希望表明他们是怎样恰如其分地嵌入我们的框架的。也就是我们度量的</div> </li> <li><a href="/article/2474.htm" title="XSD中的targetNameSpace解释" target="_blank">XSD中的targetNameSpace解释</a> <span class="text-muted">darrenzhu</span> <a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a><a class="tag" taget="_blank" href="/search/namespace/1.htm">namespace</a><a class="tag" taget="_blank" href="/search/xsd/1.htm">xsd</a><a class="tag" taget="_blank" href="/search/targetnamespace/1.htm">targetnamespace</a> <div>参考链接: http://blog.csdn.net/colin1014/article/details/357694 xsd文件中定义了一个targetNameSpace后,其内部定义的元素,属性,类型等都属于该targetNameSpace,其自身或外部xsd文件使用这些元素,属性等都必须从定义的targetNameSpace中找: 例如:以下xsd文件,就出现了该错误,即便是在一</div> </li> <li><a href="/article/2601.htm" title="什么是RAID0、RAID1、RAID0+1、RAID5,等磁盘阵列模式?" target="_blank">什么是RAID0、RAID1、RAID0+1、RAID5,等磁盘阵列模式?</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/raid/1.htm">raid</a> <div>RAID 1又称为Mirror或Mirroring,它的宗旨是最大限度的保证用户数据的可用性和可修复性。 RAID 1的操作方式是把用户写入硬盘的数据百分之百地自动复制到另外一个硬盘上。由于对存储的数据进行百分之百的备份,在所有RAID级别中,RAID 1提供最高的数据安全保障。同样,由于数据的百分之百备份,备份数据占了总存储空间的一半,因而,Mirror的磁盘空间利用率低,存储成本高。 Mir</div> </li> <li><a href="/article/2728.htm" title="yii2 restful web服务快速入门" target="_blank">yii2 restful web服务快速入门</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/yii2/1.htm">yii2</a> <div>快速入门 Yii 提供了一整套用来简化实现 RESTful 风格的 Web Service 服务的 API。 特别是,Yii 支持以下关于 RESTful 风格的 API: 支持 Active Record 类的通用API的快速原型 涉及的响应格式(在默认情况下支持 JSON 和 XML) 支持可选输出字段的定制对象序列化 适当的格式的数据采集和验证错误 </div> </li> <li><a href="/article/2855.htm" title="MongoDB查询(3)——内嵌文档查询(七)" target="_blank">MongoDB查询(3)——内嵌文档查询(七)</a> <span class="text-muted">eksliang</span> <a class="tag" taget="_blank" href="/search/MongoDB%E6%9F%A5%E8%AF%A2%E5%86%85%E5%B5%8C%E6%96%87%E6%A1%A3/1.htm">MongoDB查询内嵌文档</a><a class="tag" taget="_blank" href="/search/MongoDB%E6%9F%A5%E8%AF%A2%E5%86%85%E5%B5%8C%E6%95%B0%E7%BB%84/1.htm">MongoDB查询内嵌数组</a> <div>MongoDB查询内嵌文档 转载请出自出处:http://eksliang.iteye.com/blog/2177301 一、概述        有两种方法可以查询内嵌文档:查询整个文档;针对键值对进行查询。这两种方式是不同的,下面我通过例子进行分别说明。   二、查询整个文档 例如:有如下文档 db.emp.insert({ &qu</div> </li> <li><a href="/article/2982.htm" title="android4.4从系统图库无法加载图片的问题" target="_blank">android4.4从系统图库无法加载图片的问题</a> <span class="text-muted">gundumw100</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a> <div>典型的使用场景就是要设置一个头像,头像需要从系统图库或者拍照获得,在android4.4之前,我用的代码没问题,但是今天使用android4.4的时候突然发现不灵了。baidu了一圈,终于解决了。 下面是解决方案: private String[] items = new String[] { "图库","拍照" }; /* 头像名称 */</div> </li> <li><a href="/article/3109.htm" title="网页特效大全 jQuery等" target="_blank">网页特效大全 jQuery等</a> <span class="text-muted">ini</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a><a class="tag" taget="_blank" href="/search/ini/1.htm">ini</a> <div>HTML5和CSS3知识和特效 asp.net ajax jquery实例 分享一个下雪的特效 jQuery倾斜的动画导航菜单 选美大赛示例 你会选谁 jQuery实现HTML5时钟 功能强大的滚动播放插件JQ-Slide 万圣节快乐!!! 向上弹出菜单jQuery插件 htm5视差动画 jquery将列表倒转顺序 推荐一个jQuery分页插件 jquery animate</div> </li> <li><a href="/article/3236.htm" title="swift objc_setAssociatedObject block(version1.2 xcode6.4)" target="_blank">swift objc_setAssociatedObject block(version1.2 xcode6.4)</a> <span class="text-muted">啸笑天</span> <a class="tag" taget="_blank" href="/search/version/1.htm">version</a> <div>  import UIKit class LSObjectWrapper: NSObject { let value: ((barButton: UIButton?) -> Void)? init(value: (barButton: UIButton?) -> Void) { self.value = value </div> </li> <li><a href="/article/3363.htm" title="Aegis 默认的 Xfire 绑定方式,将 XML 映射为 POJO" target="_blank">Aegis 默认的 Xfire 绑定方式,将 XML 映射为 POJO</a> <span class="text-muted">MagicMa_007</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/POJO/1.htm">POJO</a><a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a><a class="tag" taget="_blank" href="/search/Aegis/1.htm">Aegis</a><a class="tag" taget="_blank" href="/search/xfire/1.htm">xfire</a> <div>      Aegis 是一个默认的 Xfire 绑定方式,它将 XML 映射为 POJO, 支持代码先行的开发.你开发服 务类与 POJO,它为你生成 XML schema/wsdl XML 和 注解映射概览       默认情况下,你的 POJO 类被是基于他们的名字与命名空间被序列化。如果</div> </li> <li><a href="/article/3490.htm" title="js get max value in (json) Array" target="_blank">js get max value in (json) Array</a> <span class="text-muted">qiaolevip</span> <a class="tag" taget="_blank" href="/search/%E6%AF%8F%E5%A4%A9%E8%BF%9B%E6%AD%A5%E4%B8%80%E7%82%B9%E7%82%B9/1.htm">每天进步一点点</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E6%B0%B8%E6%97%A0%E6%AD%A2%E5%A2%83/1.htm">学习永无止境</a><a class="tag" taget="_blank" href="/search/max/1.htm">max</a><a class="tag" taget="_blank" href="/search/%E7%BA%B5%E8%A7%82%E5%8D%83%E8%B1%A1/1.htm">纵观千象</a> <div>// Max value in Array var arr = [1,2,3,5,3,2];Math.max.apply(null, arr); // 5 // Max value in Jaon Array var arr = [{"x":"8/11/2009","y":0.026572007},{"x"</div> </li> <li><a href="/article/3617.htm" title="XMLhttpRequest 请求 XML,JSON ,POJO 数据" target="_blank">XMLhttpRequest 请求 XML,JSON ,POJO 数据</a> <span class="text-muted">Luob.</span> <a class="tag" taget="_blank" href="/search/POJO/1.htm">POJO</a><a class="tag" taget="_blank" href="/search/json/1.htm">json</a><a class="tag" taget="_blank" href="/search/Ajax/1.htm">Ajax</a><a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a><a class="tag" taget="_blank" href="/search/XMLhttpREquest/1.htm">XMLhttpREquest</a> <div>在使用XMlhttpRequest对象发送请求和响应之前,必须首先使用javaScript对象创建一个XMLHttpRquest对象。 var xmlhttp; function getXMLHttpRequest(){ if(window.ActiveXObject){ xmlhttp:new ActiveXObject("Microsoft.XMLHTTP</div> </li> <li><a href="/article/3744.htm" title="jquery" target="_blank">jquery</a> <span class="text-muted">wuai</span> <a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a> <div>以下防止文档在完全加载之前运行Jquery代码,否则会出现试图隐藏一个不存在的元素、获得未完全加载的图像的大小 等等 $(document).ready(function(){ jquery代码; }); <script type="text/javascript" src="c:/scripts/jquery-1.4.2.min.js&quo</div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>