快速了解JavaScript的DOM模型

概述

DOM全称Document Object Model,即文档对象模型。是HTML和XML文档的编程接口,DOM将文档(HTML或XML)描绘成一个多节点构成的结构。使用JavaScript可以改变文档的结构、样式和内容。

W3C DOM由以下三部分组成:

  • 核心DOM - 针对任何结构化文档的标准模型。
  • XML DOM - 针对XML文档的标准模型。
  • HTML DOM - 针对HTML文档的标准模型。

分类

DOM目前有三种级别:

  • DOM Level 1:1998年10月成为W3C的推荐标准,主要定义HTML和XML文档的底层结构。
  • DOM Level 2: 在DOM1基础上扩充了方法和属性,引入了与文档更多的交互能力。主要包括DOM视图、DOM样式、DOM事件、DOM遍历和范围等。
  • DOM Level 3:引入了将XML文档加载和序列化的方法。提供了验证文档有效性的能力。

节点树

以下面的HTML为例:



    
    节点树


    
测试块
链接

浏览器会将HTML文档解析成节点并组成节点树。

快速了解JavaScript的DOM模型_第1张图片

HTML DOM中通过不同类型节点来表示, Document是每个文档的根节点。这里的document只有一个子节点,称之为文档元素(Element)。Element表示元素类型的节点,Text表示文本类型的节点。

节点类型

DOM 的最小组成单位叫做节点(node)。上面的节点树中,每一段都由不同类型的节点组成。节点的类型有如下几种:

Node

DOM1中定义了一个Node接口,JavaScript中所有节点类型都继承自Node类型,因此属性和方法都相同。

Node类型中定义了nodeType属性来表明节点的类型,由12个常量表示。任何节点必居其一:

  • Node.ELEMENT_NODE:数值1,对应元素节点Element
  • Node.ATTRIBUTE_NODE:数值2,对应属性节点Attr
  • Node.TEXT_NODE:数值3,对应文本节点Text
  • Node.CDATA_SECTION_NODE:数值4,对应文档中CDATA部(不会由解析器解析的文本)。
  • Node.ENTITY_REFERENCE_NODE:数值5,对应实体引用。
  • Node.ENTITY_NODE:数值6,对应实体类型Entity
  • Node.PROCESSING_INSTRUCTION_NODE:数值7,对应处理指令。
  • Node.COMMENT_NODE:数值8,对应注释节点Comment
  • Node.DOCUMENT_NODE:数值9,对应文档节点Document
  • Node.DOCUMENT_TYPE_NODE:数值10,对应文档类型节点DocumentType
  • Node.DOCUMENT_FRAGMENT_NODE:数值11,对应文档片段节点DocumentFragment
  • Node.NOTATION_NODE:数值12,对应DTD中声明的符号。

使用nodeType可以很容易确定节点类型,IE中没有公开Node类型的构造函数,使用Node.ELEMENT_NODE比较会导致错误。为了兼容IE,可以使用数值进行比较:

if (onenode.nodeType == Node.ELEMENT_NODE) {    // 在IE中无效
    console.log("The Node is an Element.");
}
// 或者
if (oneNode.nodeType == 1) {    // 适用所有浏览器
    console.log("The Node is an Element.");
}

nodeName返回节点的标签名

var div = document.getElementByTagName('div')[0];
console.log(onenode.nodeName);    // DIV

nodeValue返回字符串,表示节点的文本值,可读写。

var div = document.getElementByTagName('div')[0];
console.log(onenode.nodeValue);    // null

节点关系

文档中节点都存在着一定的关系,节点之间的关系可以使用类似人类家族关系的形式描述。如,在HTML文档中,可以把看作是的父元素;相对的,也就是的子元素;而作为同级的两者之间的关系为兄弟(姐妹)关系。

Node中提供了几种节点遍历的属性:parentNodechildNodesfirstNode/lastNodepreviousSibling/nextSiblingownerDocument

Document

JavaScript通过Document类型表示文档。浏览器中的document对象是HTMLDocument的一个实例,表示整个HTML页面。Document节点具有以下特征:

  • nodeTypeNode.DOCUMENT_NODE,值为9。
  • nodeName的值为#document
  • nodeValue的值为null
  • parentNode的值为null
  • ownerDocument的值为null
  • 其子结点可能是一个DocumentTypeElementProcessingInstructionComment

document对象还有一些属性来表示网页的一些信息:

  • title:取得当前页面的标题,也可以修改当前页面的标题并反映在浏览器的标题栏中。但不会改变</code>元素。</li> <li><code>URL</code>:包含页面完整的<code>URL</code>。</li> <li><code>domain</code>:只包含页面的域名。</li> <li><code>referrer</code>:保存着链接到当前页面的那个页面的<code>URL</code>。没有来源页面的情况下,可能包含空字符串。</li> </ul> <p><code>URL</code>与<code>domain</code>属性是相互关联的。</p> <h2>Element</h2> <p>Element类型用于表现XML或HTML元素,提供对元素标签名、子节点及特性的访问。例如<code><body></code>和<code><div></code>等。<code>Element</code>节点具有以下特征:</p> <ul> <li><code>nodeType</code>为<code>Node.ELEMENT_NODE</code>,值为1。</li> <li><code>nodeName</code>的值为元素的标签名。</li> <li><code>nodeValue</code>的值为<code>null</code>。</li> <li><code>parentNode</code>可能是<code>Document</code>或<code>Element</code>。</li> <li>其子节点可能是<code>Element</code>、<code>Text</code>、<code>Comment</code>、<code>ProcessingInstruction</code>、<code>CDATASection</code>或<code>EntityReference</code>。</li> </ul> <p>要访问元素的标签名,可以使用<code>nodeName</code>属性,也可以使用<code>tagName</code>属性;这两个属性会返回相同值。</p> <p>获取<code><div id="divId"></div></code>的标签名:</p> <pre><code class="javascript">var div = document.getElementById("divId"); console.log(div.tagName); // DIV console.log(div.tagName == div.nodeName); // true</code></pre> <h3>特性和属性</h3> <p>所有HTML元素都由<code>HTMLElement</code>类型表示,不能直接通过这个类型,也是通过它的子类型来表示。<code>HTMLElement</code>类型直接继承自<code>Element</code>并添加了一些属性。每个HTML元素中的特性(例如<code><div id="d1" title="附加信息" lang="en" class="container"></code>中的<code>id</code>、<code>class</code>等)会自动变成DOM对象的属性(<code>class</code>特性与<code>className</code>属性对应)。这些都可以通过<code>div.id</code>等获取并赋值。</p> <p>一个元素中的<code>id</code>等是标准的特性,但也有非标准的特性不能使用<code>div.id</code>方式获取。那么要用什么方法来访问非特性。</p> <p><code>DOM</code>主要提供了几个方法用于对任何特性进行操作,分别是:</p> <ul> <li><code>hasAttribute(qualifiedName: string)</code>,检查<code>qualifiedName</code>这个特性是否存在。</li> <li><code>getAttribute(qualifiedName: string)</code>,获取<code>qualifiedName</code>这个特性值,如果不存在,则返回<code>null</code>。</li> <li><code>setAttribute(qualifiedName: string, value: string)</code>,设置<code>qualifiedName</code>这个特性的值为<code>value</code>。设置的特性名会被同意转换为小写形式。</li> <li><code>removeAttribute(qualifiedName: string)</code>,移除<code>qualifiedName</code>这个特性。</li> </ul> <pre><code class="html"><div id="d1" title="附加信息" lang="en" class="container main" plug-add="添加的非标准的特性"></code></pre> <p>以上面的HTML为例,使用这几种方法。</p> <pre><code class="javascript">var div = document.getElementById('d1'); div.getAttribute('title'); // 附加信息 div.hasAttribute('plug-add'); // true div.setAttribute('title', '修改附加信息'); div.removeAttribute('plug-add');</code></pre> <p>有两类特殊的特性,虽有对应的属性名,但属性的值与<code>getAttribute()</code>返回的值并不相同。</p> <p>第一类特性就是<code>style</code>,用于通过CSS为元素指定样式。通过<code>getAttribute()</code>返回的<code>style</code>中包含的是CSS文本,而通过属性返回的是一个对象。</p> <p>第二类特性是<code>onclick</code>这样的事件处理。如果通过<code>getAttribute()</code>返回的是相应代码的字符串。而访问<code>onclick</code>属性返回的是JavaScript函数(如果未指定相应特性,返回的是<code>null</code>)。</p> <h3>attributes属性</h3> <p><code>Element</code>类型的<code>attributes</code>属性返回该元素所有属性节点的一个集合,该集合是一个"动态"的<code>NamedNodeMap</code>对象。<code>NamedNodeMap</code>对象拥有下列方法。</p> <ul> <li><code>getNamedItem(name)</code>:返回<code>nodeName</code>属性等于<code>name</code>的节点。</li> <li><code>removeNamedItem(name)</code>:从列表中移除<code>nodeName</code>属性等于<code>name</code>的节点。</li> <li><code>setNamedItem(node)</code>:向列表中添加节点,以节点的<code>nodeName</code>属性为索引。</li> <li><code>item(pos)</code>:返回位于数字<code>pos</code>位置处的节点。</li> </ul> <p><code>attributes</code>属性包含一系列节点,在节点中<code>节点名称-nodeName 节点值-nodeValue</code>。</p> <pre><code class="javascript">var id = element.attributes.getNamedItem('id').nodeValue; // 方括号语法 var id = element.attributes['id'].nodeValue; // 属性名引用 var id = element.attributes.id; // 如果知道特性名所在的下标,也可以使用下标引用,假设id特性名所在下标为0. var id = element.attributes[0];</code></pre> <p>而<code>removeNamedItem()</code>方法与<code>removeAttribute()</code>方法都是将给定名称的特性删除,唯一区别就是<code>removeAttribute()</code>没有返回值,<code>removeNamedItem()</code>返回被删除特性的<code>Attr</code>节点。</p> <pre><code class="javascript">var oldAttr = element.attributes.removeNamedItem('id');</code></pre> <p><code>setNamedItem()</code>方法为<code>Element</code>添加一个新特性:</p> <pre><code class="javascript">element.attributes.setNamedItem(newAttr);</code></pre> <p>一般情况下<code>getAttribute()</code>、<code>removeAttribute()</code>和<code>setAttribute()</code>方法就够使用了,但想要遍历元素的特性,<code>attributes</code>属性倒是比较方便。下面展示如果迭代元素中每一个特性并将它们以<code>name="value" name="value"</code>这样的字符串格式。</p> <pre><code class="javascript">function listAttributes(element) { var pairs = new Array(), attrName, attrValue, i, len; if (element.hasAttributes()) { var attrs = element.attributes; for (i = 0, len = element.attributes.length; i < len; i++) { attrName = attrs[i].nodeName; attrValue = attrs[i].nodeValue; pairs.push(attrName + "=\"" + attrValue + "\""); } } return pairs.join(" "); }</code></pre> <h3>classList</h3> <p><code>className</code>属性用于操作类名,但<code>className</code>是一个字符串,修改后要设置整个字符串的值。</p> <p>HTML5扩展了<code>classList</code>属性实现类名的操作。该属性返回<code>DOMTokenList</code>集合。定义了几个方法:</p> <ul> <li><code>add(value)</code>:添加字符串到列表中。如果存在就不添加。</li> <li><code>contains(value)</code>:指定值是否存在于列表中,存在则为<code>true</code>,否则为<code>false</code>。</li> <li><code>remove(value)</code>:从列表中删除指定值。</li> <li><code>toggle(value)</code>:列表中存在指定值,删除它;没有给定值,添加它。</li> </ul> <h2>Attr</h2> <p><code>Attr</code>类型在<code>DOM</code>表示元素特性。特性是位于元素<code>attributes</code>属性中的节点。具有下列特征:</p> <ul> <li><code>nodeType</code>为<code>Node.TEXT_NODE</code>,值为3。</li> <li><code>nodeName</code>的值是特性的名称。</li> <li><code>nodeValue</code>的值是特性的名称。</li> <li><code>parentNode</code>的值为<code>null</code>。</li> <li>在HTML中不支持子节点(没有子节点)。</li> <li>在XML中子节点可以是<code>Text</code>或<code>EntityReference</code>。</li> </ul> <p>特性节点不被认为是<code>DOM</code>文档树的一部分。最常使用<code>getAttrubute()</code>、<code>setAttribute()</code>和<code>removeAttribute()</code>方法,很少直接引用特性节点。</p> <p><code>Attr</code>对象有3个属性:</p> <ul> <li><code>name</code>,特性名称,与<code>nodeName</code>的值相同。</li> <li><code>value</code>,特性值,与<code>nodeValue</code>的值相同。</li> <li><code>specified</code>,布尔值,用于区分特性在代码中是指定的还是默认的。</li> </ul> <p>如果要为元素添加特性,可以使用<code>document.createAttribute(localName)</code>方法,创建名为<code>localName</code>的特性节点。例如,要为元素添加<code>align</code>特性,可以使用下列代码:</p> <pre><code class="javascript">var attr = document.createAttribute("align"); attr.value = "left"; element.setAttributeNode(attr); alert(element.attributes["align"].value); //"left" alert(element.getAttributeNode("align").value); //"left" alert(element.getAttribute("align")); //"left"</code></pre> <h2>Text</h2> <p>文本节点由<code>Text</code>类型表示,包含的是可以照字面解释的纯文本内容。纯文本中可以包含转义后的HTML字符,但不能包含HTML代码。<code>Text</code>节点具有以下特征:</p> <ul> <li><code>nodeType</code>为<code>Node.TEXT_NODE</code>,值为3。</li> <li><code>nodeName</code>的值为<code>#text</code>。</li> <li><code>nodeValue</code>的值为节点所包含的文本。</li> <li><code>parentNode</code>是一个<code>Element</code>。</li> <li>不支持子节点(没有子节点)。</li> </ul> <p>可以通过<code>nodeValue</code>属性或<code>data</code>属性访问<code>Text</code>节点中包含的文本,这两个属性中包含的值相同。对<code>nodeValue</code>的修改也会通过<code>data</code>反映出来,反之亦然。使用下列方法可以操作节点中的文本。</p> <ul> <li><code>appendData(text)</code>:将<code>text</code>添加到节点的末尾。</li> <li><code>deleteData(offset, count)</code>:从<code>offset</code>指定位置开始删除<code>count</code>个字符。</li> <li><code>insertData(offset, text)</code>:在<code>offset</code>指定位置插入<code>text</code>。</li> <li><code>replaceData(offset, count, text)</code>:用<code>text</code>替换从<code>offset</code>指定的位置开始到<code>offset</code>+<code>count</code>位置处的文本。</li> <li><code>splitText(offset)</code>:从<code>offset</code>指定的位置将当前文本节点分成两个文本节点。</li> <li><code>substringData(offset, count)</code>:提取从<code>offset</code>指定的位置开始到<code>offset</code>+<code>count</code>为止处的字符串。</li> </ul> <p>除了这些方法外,文本节点还有一个<code>length</code>属性,保存着节点中字符的数目。而且,<code>nodeValue.length</code>和<code>data.length</code>中也保存着同样的值。</p> <p>修改文本节点的结果会立即得到反映。因此字符串会经过HTML(或XML,取决于文档类型)编码。</p> <p>使用<code>document.createTextNode()</code>可以创建文本节点,在<code>DOM创建</code>中会讲述它。</p> <h2>Comment</h2> <p>注释在DOM中是通过<code>Comment</code>类型来表示的。<code>Comment</code>节点具有下列特征:</p> <ul> <li><code>nodeType</code>为Node.COMMENT_NODE,数值为8。</li> <li><code>nodeName</code>的值为<code>#comment</code>。</li> <li><code>nodeValue</code>的值是注释的内容。</li> <li><code>parentNode</code>可能是<code>Document</code>或<code>Element</code>。</li> <li>不支持子节点(没有子节点)。</li> </ul> <p><code>Comment</code>类型与<code>Text</code>类型继承自相同的基类,因此它拥有除<code>splitText()</code>之外的所有字符串操作方法。与<code>Text</code>类型相似,也可以通过<code>nodeValue</code>或<code>data</code>属性取得注释的内容。</p> <p>获取<code><div id="divId"><!--A comment--></div></code>代码中的注释:</p> <pre><code class="javascript">var div = document.getElementById("divId"); var comment = div.firstChild; console.log(comment.data); // A comment</code></pre> <p>如果想创建注释节点,可以使用<code>document.createComment(data)</code>方法创建。</p> <pre><code class="javascript">var comment = document.createComment("Create a comment node");</code></pre> <p>浏览器不会识别位于<code></html></code>标签后面的注释。一定保证访问的注释节点位于<code><html></html></code>之间。</p> <h2>CDATASection</h2> <p><code>CDATASection</code>类型只针对基于XML文档,表示的是<code>CDATA</code>区域。与<code>Comment</code>类似,<code>CDATASection</code>类型继承自<code>Text</code>类型,因此拥有除<code>splitText()</code>之外的所有字符串操作方法。<code>CDATASection</code>节点具有以下特征:</p> <ul> <li><code>nodeType</code>为<code>CDATA_SECTION_NODE</code>,值为4。</li> <li><code>nodeName</code>的值为<code>#cdata-section</code>。</li> <li><code>nodeValue</code>的值是<code>CDATA</code>区域中的内容。</li> <li><code>parentNode</code>可能是<code>Document</code>或<code>Element</code>。</li> <li>不支持子节点(没有子节点)。</li> </ul> <p><code>CDATA</code>区域只会出现在XML文档中,因此多数浏览器都会把<code>CDATA</code>区域错误地解析为<code>Comment</code>或<code>Element</code>。以下面的代码为例:</p> <pre><code class="html"><div id="divId"><![CDATA[This is content.]]></div></code></pre> <p>这个例子中的<code><div></code>元素应该包含一个<code>CDATASection</code>节点。可是,四大主流浏览器无一能够这样解析它。即使对于有效的XHTML页面,浏览器也没有正确地支持嵌入的<code>CDATA</code>区域。</p> <p>在真正的XML文档中,可以使用<code>document.createCDataSection()</code>来创建<code>CDATA</code>区域,只需为其传入节点的内容即可。</p> <h2>DocumentType</h2> <p><code>DocumentType</code>类型在Web浏览器中并不常用。<code>DocumentType</code>包含着与文档有关的<code>doctype</code>有关的所有信息,它具有下列特征:</p> <ul> <li><code>nodeType</code>为<code>Node.DOCUMENT_TYPE_NODE</code>,值为10。</li> <li><code>nodeName</code>的值为<code>doctype</code>的名称。</li> <li><code>nodeValue</code>的值为<code>null</code>。</li> <li><code>parentNode</code>是<code>Document</code>类型。</li> <li>没有子节点。</li> </ul> <p><code>DOM 1级</code>规定的<code>DocumentType</code>对象不能动态创建,只通过解析文档代码的方式来创建。支持<code>DocumentType</code>的浏览器会把它保存在<code>document.doctype</code>中。</p> <p><code>DocumentType</code>对象在<code>DOM 1级</code>中有3个属性:</p> <ul> <li><code>DocumentType.name</code>,文档类型的名称。</li> <li><code>DocumentType.entities</code>,文档类型描述的实体<code>NamedNodeMap</code>对象。</li> <li><code>DocumentType.notations</code>,文档类型描述的符号<code>NamedNodeMap</code>对象。</li> </ul> <p>浏览器中一般是<code>HTML</code>或<code>XHTML</code>类型的文档。所以<code>entities</code>和<code>notations</code>都是空列表。只有<code>name</code>属性有用。</p> <pre><code class="html"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"></code></pre> <p>在这里,<code>DocumentType</code>中的<code>name</code>属性保存的就是<code>HTML</code>。</p> <pre><code class="javascript">console.log(document.doctype.name); // HTML</code></pre> <h2>DocumentFragment</h2> <p><code>DocumentFragment</code>是文档片段,一种"轻量级"文档,可以包含和控制节点,但不像完整文档那样占用额外资源。可以将它作为"仓库"使用。具有下列特征:</p> <ul> <li><code>nodeType</code>为<code>Node.DOCUMENT_FRAGMENT_NODE</code>,值为11。</li> <li><code>nodeName</code>的值为<code>#document-fragment</code>。</li> <li><code>nodeValue</code>的值为<code>null</code>。</li> <li><code>parentNode</code>的值为<code>null</code>。</li> <li>子节点可以是<code>Element</code>、<code>ProcessingInstruction</code>、<code>Comment</code>、<code>Text</code>、<code>CDATASection</code>或<code>EntityReference</code>。</li> </ul> <p>使用<code>document.createDocumentFragment()</code>方法创建文档片段,如下所示:</p> <pre><code class="javascript">var fragment = document.createDocumentFragment();</code></pre> <p>继承了<code>Node</code>的所有方法,用于执行针对文档的<code>DOM</code>操作。可以通过<code>appendChild()</code>或<code>insertBefore()</code>添加到文档中相应位置,但本身不会成为文档树的一部分。来看下面的HTML 示例代码:</p> <pre><code class="html"><ul id="ulId"></ul></code></pre> <p>我们给<code><ul id=ulId></ul></code>添加3个列表项。可以使用文档片段来保存创建的列表项,一次性将它们添加到文档中,避免浏览器反复渲染。</p> <pre><code class="javascript">var fragment = document.createDocumentFragment(); var ul = document.getElementById("myList"); var li = null; for (var i=0; i < 3; i++){ li = document.createElement("li"); li.appendChild(document.createTextNode("Item" + (i+1))); fragment.appendChild(li); } ul.appendChild(fragment);</code></pre> <h1>DOM查找</h1> <p>现在有一段<code>html</code>页面模板</p> <pre><code class="html">... <style> .container { background-color: blue; width: 55%; height: 55%; } </style> ... <div class="container" id="divId1">Div Text One</div> <p class="container" id="pId1">P Text One</p> <a class="container" id="aId1">A Text One</a> <div class="container" id="divId2">Div Text Two</div> <form id="primary-form" action="#" method="get"> <p>UserName: <input type="text" name="input-name"></p> <p class="container">NickName: <input type="text" name="input-name"></p> <p>Email: <input type="text" name="input-email"></p> <input type="submit" value="Submit"> </form> ...</code></pre> <p>在该模板中,我们想要获取这些标签元素,可以使用<code>document</code>对象获取的几种方法:</p> <h3>id选择器</h3> <p><code>getElementById(elementId: string): HTMLElement | null;</code></p> <p>该方法返回匹配指定<code>id</code>属性的元素节点,如果不存在,则返回<code>null</code>。</p> <p>下面通过<code>id</code>选择器来获取<code>id</code>为<code>aId1</code>的元素:</p> <pre><code class="javascript">let div = document.getElementById("aId1"); console.log(div); // <a class="container" id="aId1">A Text One</a></code></pre> <p>注意:严格匹配,包括大小写。如果写成<code>document.getElementById("aid1")</code>,输出为<code>null</code>。</p> <h3>标签选择器</h3> <p><code>getElementsByTagName(qualifiedName: string): HTMLCollectionOf<Element>;</code></p> <p>该方法返回匹配指定HTML标签名的元素列表。返回的是一个类似数组对象(<code>HTMLCollection</code>实例),可以实时反映HTML文档的变化,如果不存在,则返回<code>null</code>。</p> <pre><code class="javascript">let inputs = document.getElementsByTagName('input'); console.log(inputs); /* HTMLCollection(4) [input, input, input, input, input-name: input, email: input]*/</code></pre> <p><span class="img-wrap"><a href="http://img.e-com-net.com/image/info9/7233ad3f6b2e44dc819a81be3a91f625.jpg" target="_blank"><img class="lazy" alt="快速了解JavaScript的DOM模型_第2张图片" title="" src="http://img.e-com-net.com/image/info9/7233ad3f6b2e44dc819a81be3a91f625.jpg" width="646" height="150" style="border:1px solid black;"></a></span></p> <p>这个对象可以使用<code>length</code>属性获取元素数量,使用数组语法或<code>item()</code>方法来访问HTMLCollection对象中的项。</p> <pre><code class="javascript">inputs.length; // 输出p标签的数量 inputs[0].id; // 输出p标签集合中第一个元素的id特性的名称 inputs.item(0).className; // 输出p标签接种中第一个元素的class特性的名称</code></pre> <p>还可以通过<code>namedItem()</code>方法根据元素的<code>name</code>特性获取集合中的项。</p> <pre><code class="javascript">var nameOfInput = inputs.namedItem("input-name");</code></pre> <p>也可以使用方括号语法来访问:</p> <pre><code class="javascript">var nameOfInput = inputs["input-name"];</code></pre> <p>要想取得文档中的所有元素,可以向getElementsByTagName()中传入<code>"*"</code>,表示"全部"。</p> <pre><code class="javascript">var allElements = document.getElementsByTagName("*");</code></pre> <h3>name选择器</h3> <p><code>getElementsByName(elementName: string): NodeListOf<HTMLElement>;</code></p> <p>该方法返回匹配<code>name</code>属性的所有元素,返回值是<code>NodeList</code>,如果不存在,则返回<code>null</code>。</p> <pre><code class="javascript">var names = document.getElementsByName("input-name"); console.log(names);</code></pre> <p><span class="img-wrap"><a href="http://img.e-com-net.com/image/info9/e4701947209c4d8f808c7ff6b8b2af56.jpg" target="_blank"><img class="lazy" alt="快速了解JavaScript的DOM模型_第3张图片" title="" src="http://img.e-com-net.com/image/info9/e4701947209c4d8f808c7ff6b8b2af56.jpg" width="523" height="119" style="border:1px solid black;"></a></span></p> <p>注意,这个选择器在不同浏览器的效果是不同的,比如在IE和Opera浏览器下,这个方法也会返回<code>id</code>属性为这个值的元素。在使用的时候,应该小心使用,尽量保证<code>name</code>不和其它元素的<code>id</code>一致。</p> <h3>类选择器</h3> <p><code>getElementsByClassName(classNames: string): HTMLCollectionOf<Element>;</code>是HTML5中添加的方法。</p> <p>该方法返回匹配<code>class</code>属性的所有元素,返回值是<code>HTMLCollection</code>,如果不存在,则返回<code>null</code>。</p> <pre><code class="javascript">// 获取所有class中同时包含'red'和'test'的元素 var classes = document.getElementsByClassName("container"); console.log(classes);</code></pre> <p><span class="img-wrap"><a href="http://img.e-com-net.com/image/info9/c61e7c2a5f57496cb2873a347d91b95f.jpg" target="_blank"><img class="lazy" alt="快速了解JavaScript的DOM模型_第4张图片" title="" src="http://img.e-com-net.com/image/info9/c61e7c2a5f57496cb2873a347d91b95f.jpg" width="650" height="188" style="border:1px solid black;"></a></span></p> <p>可以接收包含一个或多个类名的字符串,传入的多个类名的先后顺序不重要。</p> <h2>Selectors API</h2> <p>W3C发起指定的标准,可使浏览器支持CSS查询。Selectors API的核心是两个方法:<code>querySelector()</code>和<code>querySelectorAll()</code>。兼容的浏览器中通过<code>Document</code>及<code>Element</code>节点类型的实例进行调用。</p> <h3>querySelector()方法</h3> <p><code>querySelector<E extends Element = Element>(selectors: string): E | null;</code></p> <p>该方法返回匹配指定选择符的第一个<code>HTMLElement</code>元素,如果不存在,则返回<code>null</code>。传入的<code>selectors</code>必须是有效的CSS选择器;如果选择器不合法,会引发<code>SYNTAX_ERR</code>异常。</p> <pre><code class="javascript">document.querySelector("#aId1"); // 取得Id为"aId1"的元素 document.querySelector("p"); // 取得p元素 document.querySelector(".container"); // 取得类为"container"的第一个元素 document.querySelector("..selector"); // 引发'SYNTAX_ERR'异常(Uncaught DOMException:Failed to execute 'querySelector on 'Document': '..selector' is not a valid selector. 意思是'..selector'不是一个有效的选择。)</code></pre> <p><code>Document</code>和<code>Element</code>都可以调用<code>querySelector()</code>方法,只是<code>Document</code>会在文档元素的范围内查找匹配的元素;<code>Element</code>只会在该元素后代元素的范围内查找匹配的元素。</p> <h3>querySelectorAll()方法</h3> <p><code>querySelectorAll<E extends Element = Element>(selectors: string): NodeListOf<E>;</code></p> <p>该方法返回匹配指定选择符的元素列表,返回的对象是<code>NodeList</code>,如果不存在,则返回空的<code>NodeList</code>。传入的<code>selectors</code>必须是有效的CSS选择器;如果选择器不合法,会引发<code>SYNTAX_ERR</code>异常。</p> <pre><code class="javascript">// 获取id为"primary-form"中所有<p>元素 document.getElementById("primary-form").querySelectorAll("p"); // 获取类为"container"的所有元素 document.querySelectorAll(".container"); // 获取所有<form>元素中的所有<p>元素 document.querySelectorAll("form p");</code></pre> <p><span class="img-wrap"><a href="http://img.e-com-net.com/image/info9/15d88e192e8e492c9a944777e7c92022.jpg" target="_blank"><img class="lazy" alt="快速了解JavaScript的DOM模型_第5张图片" title="" src="http://img.e-com-net.com/image/info9/15d88e192e8e492c9a944777e7c92022.jpg" width="650" height="263" style="border:1px solid black;"></a></span></p> <h3>matches()方法</h3> <p>Selectors API Level 2规范为<code>Element</code>类型新增了一个方法:</p> <p><code>matches(selectors: string): boolean;</code></p> <p>该方法判断当前DOM节点是否能完全匹配指定选择符,如果匹配成功,返回<code>true</code>;匹配失败,返回<code>false</code>。</p> <pre><code class="javascript">var elems = document.getElementsByTagName('p'); for (var i = 0; i < elems.length; i++) { // 获取匹配'container'类选择符的dom节点 if (elems.item(i).matches('.container')) { console.log('The ' + elems.item(i).textContent + ' is container'); } } /*The P Text One is container The NickName: is container*/</code></pre> <p>注意,有些供应商会有自己实验性方法在<code>matchesSelector()</code>方法之前加些前缀。如果想使用这种方法,可以编写一个包装函数。</p> <pre><code class="javascript">function matchesSelector(element, selector){ if (element.matches) { // 标准方法 return element.matches(selector); } else if (element.matchesSelector){ return element.matchesSelector(selector); } else if (element.msMatchesSelector){ // IE 9+支持 return element.msMatchesSelector(selector); } else if (element.mozMatchesSelector){ // Firefox 3.6+支持 return element.mozMatchesSelector(selector); } else if (element.webkitMatchesSelector){ // Safari 5+和Chrome支持 return element.webkitMatchesSelector(selector); } else { throw new Error("Not supported."); } } if (matchesSelector(document.body, ".container")){ //执行操作 }</code></pre> <p>当有的浏览器不支持<code>Element.matches()</code>或<code>Element.matchesSelector()</code>,但支持<code>document.querySelectorAll()</code>方法,可以有替代方案:</p> <pre><code class="javascript">if (!Element.prototype.matches) { Element.prototype.matches = Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector || function(s) { var matches = (this.document || this.ownerDocument).querySelectorAll(s), i = matches.length; while (--i >= 0 && matches.item(i) !== this) {} return i > -1; }; }</code></pre> <h1>DOM遍历</h1> <p><code>Node</code>节点提供了几种属性,用于访问DOM节点。</p> <h3>parentNode</h3> <p><code>node.parentNode</code>属性用于返回指定节点的父节点。除<code>document</code>外,所有节点都有父节点,<code>document</code>对象的父节点为<code>null</code>。示例如下:</p> <pre><code class="javascript">document.getElementById('divId2').parentNode;</code></pre> <h3>childNodes</h3> <p><code>node.childNodes</code>属性用于返回指定节点的子结点的<code>Node</code>对象集合。示例如下:</p> <pre><code class="javascript">document.getElementById('primary-form').childNodes;</code></pre> <h3>firstChild/lastChild</h3> <p><code>node.firstChild</code>属性用于访问第一个子节点;<code>node.lastChild</code>属性用于访问最后一个子节点。如果要访问的节点不存在,则返回<code>null</code>。示例如下:</p> <pre><code class="javascript">document.getElementById('primary-form').firstChild document.getElementById('primary-form').lastChild;</code></pre> <h3>previousSibling/nextSibling</h3> <p><code>node.previousSibling</code>属性用于访问之前的同级节点;<code>node.nextSibling</code>属性用于访问之后的同级节点。具有相同父节点为同级节点,之前或之后表示它们在文档中出现的顺序。实例如下:</p> <pre><code class="javascript">document.getElementById('divId2').previousSibling; document.getElementById('divId2').nextSibling;</code></pre> <h3>ownerDocument</h3> <p><code>node.ownerDocument</code>属性用于返回元素的根节点,即:文档对象(<code>Document</code>)。通过这个属性,我们能够直接访问根节点而不必层层遍历。实例如下:</p> <pre><code class="javascript">document.getElementById('divId2').ownerDocument;</code></pre> <h2>Element Traversal</h2> <p>Element Traversal API 为DOM元素添加了以下5个属性。</p> <ul> <li><code>childElementCount</code>:返回子元素(不包括文本节点和注释)的格式。</li> <li><code>firstElementChild</code>:指向第一个子元素;<code>firstChild</code>的元素版。</li> <li><code>lastElementChild</code>:指向最后一个子元素;<code>lastChild</code>的元素版。</li> <li><code>previousElementSibling</code>:指向前一个同辈元素;<code>previousSibling</code>的元素版。</li> <li><code>nextElementSibling</code>:指向后一个同辈元素;<code>nextSibling</code>的元素版。</li> </ul> <p>支持的浏览器为DOM元素添加了这些属性,利用这些元素不必担心空白文档节点,从而可以更方便地查找DOM元素。</p> <h1>DOM操作</h1> <p>因为关系节点都是只读的,所以DOM提供了一些操作节点的方法。</p> <h3>appendChild()</h3> <p><code>node.appendChild(newChild)</code>方法用于向<code>childNodes</code>列表的末尾添加一个节点并返回新增的节点。</p> <pre><code class="javascript">var returnedNode = div.appendChild(newNode);</code></pre> <h3>insertBefore()</h3> <p><code>node.insertBefore(newChild, refChild)</code>方法会在指定的参照节点<code>refChild</code>之前插入新节点<code>newChild</code>。插入节点后,被插入的节点会变成参照节点的前一个同胞节点(<code>previousSibling</code>),同时被方法返回。如果<code>refChild</code>是<code>null</code>,则<code>insertBefore()</code>与<code>appendChild()</code>执行相同的操作。</p> <pre><code class="javascript">var returnedNode = div.insertBefore(newNode, div.lastChild);</code></pre> <h3>replaceChild()</h3> <p><code>node.replaceChild(newChild, oldChild)</code>方法将要替换的节点<code>oldChild</code>移除,并将要插入的节点<code>newChild</code>插入并占据其位置。实例如下:</p> <pre><code class="javascript">document.getElementById('divId2').replaceChild(newnode, oldnode);</code></pre> <p>在使用<code>replaceChild()</code>插入一个节点时,该节点的所有关系指针都会从被它替换的节点复制过来。被替换的节点仍然还在文档中,但它在文档中已经没有自己的位置了。</p> <h3>removeChild()</h3> <p>而如果只想移除而非替换节点,可以使用<code>node.removeChild(oldChild)</code>方法,该方法将要移除的节点<code>oldChild</code>移除,并返回移除的节点。</p> <pre><code class="javascript">var removedNode = node.removeChild(node.firstChild);</code></pre> <p>与使用<code>replaceChild()</code>方法一样,通过<code>removeChild()</code>移除的节点仍然为文档所有,只不过在文档中已经没有了自己的位置。</p> <p>上面介绍的四种方法操作的都是某个节点的子节点,要使用这几个方法必须先取得父节点。另外,并不是所有类型的节点都有子节点,如果在不支持子节点的节点上调用这些方法,将会导致错误发生。</p> <h1>DOM创建</h1> <p>DOM节点创建最常用的便是<code>document.createElement()</code>和<code>document.createTextNode()</code>方法。</p> <h3>createElement()</h3> <p><code>document.createElement(tagName)</code>方法根据指定<code>tagName</code>标签名创建新元素节点,返回一个<code>HTMLElement</code>对象。标签名在HTML文档中不区分大小写,在XML(包括XHTML)文档中区分大小写。例如,创建一个<code><p></code>元素。</p> <pre><code class="javascript">var p = document.createElement('p');</code></pre> <p>在使用<code>createElement()</code>方法创建新元素的同时,也为新元素设置了<code>ownerDocument</code>属性。</p> <h3>createTextNode()</h3> <p><code>document.createTextNode(data: string)</code>方法根据指定<code>data</code>文本创建新文本节点。作为参数的文本按照HTML或XML的格式进行编码。</p> <pre><code class="javascript">var textNode = document.createTextNode("<h4>Hello </h4> world!");</code></pre> <p>在创建新文本节点的同时,也会为其设置<code>ownerDocument</code>属性。</p> <h3>cloneNode()</h3> <p><code>node.cloneNode(deep)</code>方法用于对调用这个方法的节点创建一个完全相同的副本。<code>deep</code>是布尔值,设置是否执行深复制。默认为<code>false</code>,执行浅复制(只复制节点本身);当为<code>true</code>时,执行深复制(复制节点及其整个子节点树)。</p> <pre><code class="javascript">var node = document.getElementById('divId2').lastChild.cloneNode(true);</code></pre> <p>这些用于创建节点和复制节点的方法,创建或复制的节点并不会出现在文档中,需要通过<code>appendChild()</code>、<code>insertBefore()</code>或<code>replaceChild()</code>将它添加到文档中。</p> <pre><code class="javascript">document.getElementById('divId2').appendChild(node);</code></pre> <p>不管是<code>createElement()</code>、<code>createTextNode()</code>或者<code>cloneNode()</code>三种的哪种方法,创建新的节点都未被添加到文档树中。可以使用上面介绍的<code>appendChild()</code>、<code>insertBefore()</code>或<code>replaceChild()</code>方法将新节点添加到文档树中。</p> <p>一旦将节点添加到文档树中,浏览器就会立即呈现。</p> <p>一旦使用<code>appendChild()</code>等方法插入相邻的同胞文本节点时,会导致相邻文本节点混乱。</p> <p>而在一个包含两个或多个文本节点的父元素上调用<code>normalize()</code>方法,就会将所有文本节点合并成一个节点。</p> <pre><code class="javascript">var element = document.createElement("div"); element.className = "message"; var textNode1 = document.createTextNode("Hello, "); element.appendChild(textNode1); var textNode2 = document.createTextNode("Pandora!"); element.appendChild(textNode2); document.body.appendChild(element); console.log(element.childNodes.length); // 2 element.normalize(); console.log(element.childNodes.length); // 1 console.log(element.firstChild.nodeValue); // "Hello, Pandora!"</code></pre> <p>浏览器在解析文档时永远不会创建相邻的文本节点。这种情况只会作为执行DOM操作的结果出现。</p> <p>还有一个与<code>normalize()</code>相反的方法<code> splitText(offset)</code>:将一个文本节点分成两个文本节点。</p> <pre><code class="javascript">var element = document.createElement("div"); element.className = "message"; var textNode = document.createTextNode("Hello, Pandora!"); element.appendChild(textNode); document.body.appendChild(element); var newNode = element.firstChild.splitText(6); console.log(element.firstChild.nodeValue); // "Hello," console.log(newNode.nodeValue); // " Pandora!" console.log(element.childNodes.length); // 2</code></pre> <p>更多内容请关注公众号「海人为记」</p> <p><span class="img-wrap"><img class="lazy" alt="image" title="image" src="http://img.e-com-net.com/image/info9/e03ce80427c7481da6a70ffa5aa3e0d9.jpg" width="0" height="0"></span></p> </article> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1432718117884252160"></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前端)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1904128679642984448.htm" title="【html5期末大作业】基于HTML仿QQ音乐官网网站" target="_blank">【html5期末大作业】基于HTML仿QQ音乐官网网站</a> <span class="text-muted">IT-司马青衫</span> <a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a><a class="tag" taget="_blank" href="/search/%E8%AF%BE%E7%A8%8B%E8%AE%BE%E8%AE%A1/1.htm">课程设计</a> <div>精彩专栏推荐文末获取联系✍️作者简介:一个热爱把逻辑思维转变为代码的技术博主作者主页:【主页——获取更多优质源码】web前端期末大作业:【毕设项目精品实战案例(1000套)】程序员有趣的告白方式:【HTML七夕情人节表白网页制作(110套)】超炫酷的Echarts大屏可视化源码:【Echarts大屏展示大数据平台可视化(150套)】HTML+CSS+JS实例代码:【️HTML+CSS+JS实例代码</div> </li> <li><a href="/article/1904123883078873088.htm" title="AI程序员大逃杀:从“码农”到“魔法师”的奇幻漂流 ——揭秘人工智能如何重塑程序员工作流" target="_blank">AI程序员大逃杀:从“码农”到“魔法师”的奇幻漂流 ——揭秘人工智能如何重塑程序员工作流</a> <span class="text-muted">lifire_H</span> <a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a> <div>当程序员遇上AI,是“饭碗不保”还是“原地飞升”?这场代码界的工业革命,正在让每个程序员经历从“流水线工人”到“科技魔法师”的奇幻蜕变。一、效率革命:当键盘遇上“读心术”1.需求分析:从“鸡同鸭讲”到“灵魂共鸣”还记得那些年被客户需求文档支配的恐惧吗?甲方爸爸一句“我想要五彩斑斓的黑”,就能让产品经理和程序员集体崩溃。现在,AI就像个自带翻译机的“需求捕手”——把客户支离破碎的诉求往WPSAI里一</div> </li> <li><a href="/article/1904114168382943232.htm" title="Linux信号处理:从“死亡快递“到系统级心跳的奇幻漂流" target="_blank">Linux信号处理:从“死亡快递“到系统级心跳的奇幻漂流</a> <span class="text-muted">Loving_enjoy</span> <a class="tag" taget="_blank" href="/search/%E5%AE%9E%E7%94%A8%E6%8A%80%E5%B7%A7/1.htm">实用技巧</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>当Ctrl+C变成"死亡按钮"2017年,某倒霉程序员在深夜误触Ctrl+C,导致价值千万的比特币矿机集群集体"自杀",这场事故揭示了信号处理的本质——它既是系统的紧急逃生通道,也是定时炸弹的遥控器。本文将带你走进Linux信号的奇幻世界,看这些1到64号的"数字幽灵"如何游走于进程之间。---##一、信号基础:操作系统的摩尔斯电码###1.1信号的诞生:Unix世界的暴力美学-**31个传统信号</div> </li> <li><a href="/article/1904112151262457856.htm" title="从头开始学C语言第三十二天——函数" target="_blank">从头开始学C语言第三十二天——函数</a> <span class="text-muted">神阶平天牛魔王</span> <a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a> <div>函数可以定义为完成特定功能的模块,函数程序代码独立,通常要求要有返回值,也就是return,也可以返回空值0主要函数分为三类:主函数也就是main函数库函数,包括用过的scanf,printf,strlen,strcpy等包含在stdio.h,string.h等库中自定义函数,程序员自己定义的函数模块一般形式:(){语句序列;return[()];}数据类型是整个函数返回值的类型return语句表</div> </li> <li><a href="/article/1904074456221937664.htm" title="富途证券C++面试题及参考答案" target="_blank">富途证券C++面试题及参考答案</a> <span class="text-muted">大模型大数据攻城狮</span> <a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF%E9%9D%A2%E8%AF%95/1.htm">后端面试</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E5%8E%82%E9%9D%A2%E8%AF%95/1.htm">大厂面试</a><a class="tag" taget="_blank" href="/search/Epoll/1.htm">Epoll</a><a class="tag" taget="_blank" href="/search/%E6%99%BA%E8%83%BD%E6%8C%87%E9%92%88/1.htm">智能指针</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93%E7%B4%A2%E5%BC%95/1.htm">数据库索引</a> <div>C++中堆和栈的区别在C++中,堆和栈是两种不同的内存区域,它们有许多区别。从内存分配方式来看,栈是由编译器自动分配和释放的内存区域。当一个函数被调用时,函数内的局部变量、函数参数等会被压入栈中,这些变量的内存空间在函数执行结束后会自动被释放。例如,在下面的函数中:voidfunc(){inta=5;//这里的变量a存储在栈中,当func函数结束后,a所占用的栈空间会自动释放}而堆是由程序员手动分</div> </li> <li><a href="/article/1904044192745713664.htm" title="网安会有35岁中年危机吗,还有网安将来发展怎么样?网络安全工程师可以干到多大年龄" target="_blank">网安会有35岁中年危机吗,还有网安将来发展怎么样?网络安全工程师可以干到多大年龄</a> <span class="text-muted">认真写程序的强哥</span> <a class="tag" taget="_blank" href="/search/web%E5%AE%89%E5%85%A8/1.htm">web安全</a><a class="tag" taget="_blank" href="/search/%E5%B9%B2%E8%B4%A7%E5%88%86%E4%BA%AB/1.htm">干货分享</a><a class="tag" taget="_blank" href="/search/%E9%BB%91%E5%AE%A2%E6%8A%80%E6%9C%AF/1.htm">黑客技术</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/1.htm">网络安全</a><a class="tag" taget="_blank" href="/search/%E6%B8%97%E9%80%8F%E6%B5%8B%E8%AF%95/1.htm">渗透测试</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA/1.htm">计算机</a> <div>关于35岁中年危机这个问题,我想说,在网安行业里,这根本就不是个事儿!!与传统的IT行业不同,网安行业更加注重实战经验和技能深度,而不是单一的年龄因素。随着经验的积累,网络安全工程师在面对复杂问题时,反应更快、决策更准,这种价值是无法用年龄来衡量的。所以,只要你保持学习热情,不断提升自己的技能,35岁不仅不是终点,反而可能是你职业生涯的新起点。初入计算机行业的人或者想转行大学计算机相关专业准程序员</div> </li> <li><a href="/article/1904021738241454080.htm" title="B站黑马程序员第二章10——字符串格式化,占位符" target="_blank">B站黑马程序员第二章10——字符串格式化,占位符</a> <span class="text-muted">苹果.Python.八宝粥</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>#字符串格式化#占位符%S%表示:我要占位s表示:将变成字符串放入占位的地方#多个变量占位拼接,变量要用括号,用逗号隔开#将变量内容均转换为字符串进行拼接name="朱丽叶"height=166weight=57.5print("我最爱的狗狗是:%s,她个子高%s,身材好%s。"%(name,height,weight))#多类型数据占位#%s将内容转换为字符串,放入占位#%d将内容转换为整数,放</div> </li> <li><a href="/article/1903966995972419584.htm" title="Tiny RDM:为什么说程序员都需要他,这款开源项目,太好用,轻量化的跨平台Redis桌面客户端,谁用谁知道!!" target="_blank">Tiny RDM:为什么说程序员都需要他,这款开源项目,太好用,轻量化的跨平台Redis桌面客户端,谁用谁知道!!</a> <span class="text-muted">小华同学ai</span> <a class="tag" taget="_blank" href="/search/%E5%BC%80%E6%BA%90/1.htm">开源</a><a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法TinyRDM是一款现代化、轻量级的跨平台Redis桌面客户端。它支持Mac、Windows和Linux系统,提供了丰富的功能特性,旨在为开发者提供便捷、高效的Redis操作体验。功能特性极度轻量TinyRDM基于Webview2构建,不内嵌浏览器,这使得它在保持轻量级的同时,也拥有出色的性能。感谢Wails框架</div> </li> <li><a href="/article/1903964219125067776.htm" title="程序员晋升架构师实战指南" target="_blank">程序员晋升架构师实战指南</a> <span class="text-muted">甘苦人生</span> <a class="tag" taget="_blank" href="/search/%E8%81%8C%E4%B8%9A%E8%A7%84%E5%88%92/1.htm">职业规划</a><a class="tag" taget="_blank" href="/search/%E8%81%8C%E5%9C%BA%E5%92%8C%E5%8F%91%E5%B1%95/1.htm">职场和发展</a> <div>以下是为程序员量身定制的晋升架构师实战指南,结合行业案例与可落地路径,助你完成技术跃迁:一、晋升路径拆解(从Code到Architecture)程序员→高级工程师核心任务:独立完成模块开发(需求分析+方案设计+编码实现)技术重点:掌握1-2门核心语言(如Java/Go)、熟悉主流框架(SpringCloud/Dubbo)案例:主导用户中心模块开发,通过缓存优化将接口响应时间从800ms降至150m</div> </li> <li><a href="/article/1903942014903316480.htm" title="燃爆!程序员如何借助 AI 大模型冲破编程效率枷锁?(以DeepSeek,ChatGPT为例)" target="_blank">燃爆!程序员如何借助 AI 大模型冲破编程效率枷锁?(以DeepSeek,ChatGPT为例)</a> <span class="text-muted">羑悻的小杀马特.</span> <a class="tag" taget="_blank" href="/search/AI%E5%AD%A6%E4%B9%A0/1.htm">AI学习</a><a class="tag" taget="_blank" href="/search/chatgpt/1.htm">chatgpt</a><a class="tag" taget="_blank" href="/search/deepseek/1.htm">deepseek</a><a class="tag" taget="_blank" href="/search/AI%E5%A4%A7%E6%A8%A1%E5%9E%8B/1.htm">AI大模型</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>AI大模型已成为程序员提升效率的有力助手。本文聚焦DeepSeek和ChatGPT,探讨程序员如何借其冲破编程效率枷锁。在代码编写阶段,它们能快速生成基础框架、实现特定功能及复杂算法代码;调试时,精准分析错误并给出优化建议;文档生成方面,为函数、类及项目文档助力。程序员需掌握高效交互技巧,结合自身经验,合理利用AI大模型,全面提升编程效率,开启高效编程新境界。目录一·本篇背景:二、AI大模型简介2</div> </li> <li><a href="/article/1903922587491168256.htm" title="MongoDB慢日志查询及索引创建" target="_blank">MongoDB慢日志查询及索引创建</a> <span class="text-muted">laolitou_1024</span> <a class="tag" taget="_blank" href="/search/%E4%B8%AD%E9%97%B4%E4%BB%B6/1.htm">中间件</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E6%9C%8D%E5%8A%A1/1.htm">微服务</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a> <div>MongoDB的慢日志(SlowQueryLog)对于运维和程序员来说都非常重要,因为它直接关系到数据库的性能和应用程序的稳定性。以下分享介绍下MongoDB慢日志查询及索引创建相关的一些笔记。一,准备1.使用db.currentOp()实时监控db.currentOp()可以查看当前正在执行的操作,适合捕捉瞬时的高CPU操作。db.currentOp()示例:过滤长时间运行的操作db.curre</div> </li> <li><a href="/article/1903828741151322112.htm" title="Python基于深度学习的动物图片识别技术的研究与实现" target="_blank">Python基于深度学习的动物图片识别技术的研究与实现</a> <span class="text-muted">Java老徐</span> <a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/%E6%AF%95%E4%B8%9A%E8%AE%BE%E8%AE%A1/1.htm">毕业设计</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</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/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E7%9A%84%E5%8A%A8%E7%89%A9%E5%9B%BE%E7%89%87%E8%AF%86%E5%88%AB%E6%8A%80%E6%9C%AF/1.htm">深度学习的动物图片识别技术</a><a class="tag" taget="_blank" href="/search/Python%E5%8A%A8%E7%89%A9%E5%9B%BE%E7%89%87%E8%AF%86%E5%88%AB%E6%8A%80%E6%9C%AF/1.htm">Python动物图片识别技术</a> <div>博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w+、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌文末获取源码联系精彩专栏推荐订阅不然下次找不到哟2022-2024年最全的计算机软件毕业设计选题大全:1000个热门选题推荐✅Java项目精品实战案例《100套》Java微信小程序项目实战《100套》感兴趣的可以先收藏起来,还有大家</div> </li> <li><a href="/article/1903818774201561088.htm" title="技术大佬和普通程序员改bug的区别!" target="_blank">技术大佬和普通程序员改bug的区别!</a> <span class="text-muted">程序员干货站</span> <a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80/1.htm">编程语言</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</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%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a> <div>阅读本文大概需要2min文/强哥;未经授权禁止转载在我这么多年的工作生涯里,难免遇到那些工作糊弄的开发同事,随意编程的实习生,不够细致的测试,缺乏专业度的产品...产品的体验,取决于多个环节的把控,但很多情况下,由于bug严重影响体验,或者直接造成产品事故的,那么开发想甩锅都甩不掉!今天就给大家从几方面讲讲,经验丰富的程序员,是怎么debug的!1、并不是所有bug都需要修复修bug有个前提,那就</div> </li> <li><a href="/article/1903799724872364032.htm" title="开发语言漫谈-脚本语言" target="_blank">开发语言漫谈-脚本语言</a> <span class="text-muted">大道不孤,众行致远</span> <a class="tag" taget="_blank" href="/search/%E6%8A%80%E6%9C%AF%E6%9D%82%E8%B0%88/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> <div>前面讲的都称之为编程语言,就是做系统用的。还有一大类称之为脚本语言的语言,这类语言数量极多,大部分程序员用不上,也不关心,这是系统维护人员专用的邻域。这个定义其实也很不准确,不必较真。更准确的来讲,能直接运行的文本都可以称之为脚本语言,按这个标准,python也是。但是python同样用于做系统。我们今天讲的脚本语言纯粹用于系统维护邻域。我们重点将编程语言,对这些脚本语言就打包一起介绍了bash:</div> </li> <li><a href="/article/1903781573514293248.htm" title="pyspark学习rdd处理数据方法——学习记录" target="_blank">pyspark学习rdd处理数据方法——学习记录</a> <span class="text-muted">亭午</span> <a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a> <div>python黑马程序员"""文件,按JSON字符串存储1.城市按销售额排名2.全部城市有哪些商品类别在售卖3.上海市有哪些商品类别在售卖"""frompysparkimportSparkConf,SparkContextimportosimportjsonos.environ['PYSPARK_PYTHON']=r"D:\anaconda\envs\py10\python.exe"#创建Spark</div> </li> <li><a href="/article/1903758738213367808.htm" title="HTML+CSS案例展示(CSS3D效果旋转相册)" target="_blank">HTML+CSS案例展示(CSS3D效果旋转相册)</a> <span class="text-muted">hacalili</span> <a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/css3/1.htm">css3</a> <div>参考来源:黑马程序员pink老师前端入门教程,零基础必看的h5(html5)+css3+移动端前端视频教程_哔哩哔哩_bilibili效果展示:总结:transform:translate(x,y)rotate(180deg)scale()...顺序对最后的效果有影响,需要根据需求安排位移和其他属性的顺序;实现暂停动画效果:animation-play-state:paused;经常和鼠标经过等其</div> </li> <li><a href="/article/1903745867702136832.htm" title="Python知识分享第十四天" target="_blank">Python知识分享第十四天</a> <span class="text-muted">闵少搞AI</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>“”"1.面向对象相关概述概述面向对象是一种编程思想强调的是以对象为基础完成的各种操作它是基于面向过程的扩展Python中是同时支持面向对象和面向过程这两种编程思想的思想特点更符合人们的思考习惯把复杂的问题简单化把人们(程序员)从执行者变成了指挥者2.面向对象三大特征介绍封装继承多态封装概述封装就是隐藏对象的属性和实现细节仅对外提供公共的访问方式举例:插板电脑手机好处提高代码的安全性弊端代码量增加</div> </li> <li><a href="/article/1903734519983304704.htm" title="编程内容简述!" target="_blank">编程内容简述!</a> <span class="text-muted">恶霸不委屈</span> <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/%E9%9D%92%E5%B0%91%E5%B9%B4%E7%BC%96%E7%A8%8B/1.htm">青少年编程</a><a class="tag" taget="_blank" href="/search/%E6%B1%87%E7%BC%96/1.htm">汇编</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>编程是指通过计算机语言来开发软件、程序和应用的过程,通常通过编写一系列的指令,来让计算机完成特定的任务。编程可以涉及多个领域和技术,以下是一些主要的编程内容:1.编程语言编程语言是程序员与计算机进行沟通的桥梁,不同的编程语言适用于不同的任务。常见的编程语言有:Python:简单易学,适用于数据分析、人工智能、网页开发等。JavaScript:网页开发中不可或缺的语言,用于动态网页和前端开发。Jav</div> </li> <li><a href="/article/1903726445860024320.htm" title="如何用3个月零基础入门网络安全?_网络安全零基础怎么学习" target="_blank">如何用3个月零基础入门网络安全?_网络安全零基础怎么学习</a> <span class="text-muted">白帽黑客啊一</span> <a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/web%E5%AE%89%E5%85%A8/1.htm">web安全</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E5%AE%89%E5%85%A5%E9%97%A8/1.htm">网安入门</a> <div>基于入门网络安全/黑客打造的:黑客&网络安全入门&进阶学习资源包前言写这篇教程的初衷是很多朋友都想了解如何入门/转行网络安全,实现自己的“黑客梦”。文章的宗旨是:1.指出一些自学的误区2.提供客观可行的学习表3.推荐我认为适合小白学习的资源.大佬绕道哈!基于入门网络安全/黑客打造的:黑客&网络安全入门&进阶学习资源包一、自学网络安全学习的误区和陷阱1.不要试图先成为一名程序员(以编程为基础的学习)</div> </li> <li><a href="/article/1903694907399270400.htm" title="[代码规范]1_良好的命名规范能减轻工作负担" target="_blank">[代码规范]1_良好的命名规范能减轻工作负担</a> <span class="text-muted">啾啾大学习</span> <a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E9%80%9A%E7%94%A8/1.htm">编程通用</a><a class="tag" taget="_blank" href="/search/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83/1.htm">代码规范</a><a class="tag" taget="_blank" href="/search/Java%E5%91%BD%E5%90%8D%E8%A7%84%E8%8C%83/1.htm">Java命名规范</a><a class="tag" taget="_blank" href="/search/%E5%91%BD%E5%90%8D%E8%A7%84%E8%8C%83/1.htm">命名规范</a><a class="tag" taget="_blank" href="/search/%E9%95%BF%E5%91%BD%E5%90%8D%E6%96%B9%E6%A1%88/1.htm">长命名方案</a> <div>欢迎来到啾啾的博客,一个致力于构建完善的Java程序员知识体系的博客,记录学习的点滴,分享工作的思考、实用的技巧,偶尔分享一些杂谈。欢迎评论交流,感谢您的阅读。目录引言命名——提炼含义减少注释类名命名接口与实现类的命名方法命名的最佳实践1.方法名的结构2.参数与返回值的隐含3.避免缩写4.逻辑与副作用的体现5.条件判断方法长命名处理——实战答疑处理方法1.利用上下文环境简化名称2.使用领域术语或缩</div> </li> <li><a href="/article/1903690995237711872.htm" title="小菜鸟的Python笔记001:将Word文档中数据汇总到Excel表格" target="_blank">小菜鸟的Python笔记001:将Word文档中数据汇总到Excel表格</a> <span class="text-muted">蜉蝣2805</span> <a class="tag" taget="_blank" href="/search/%E5%B0%8F%E8%8F%9C%E9%B8%9F%E7%9A%84Python%E7%AC%94%E8%AE%B0/1.htm">小菜鸟的Python笔记</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a> <div>将Word文档中数据汇总到Excel表格前言一、应用场景二、程序思路及准备工作思路如下:准备工作:三、程序代码1、主程序2、获取Word文档列表3、提取文档内数据4、导入到Excel表格四、遇到的问题1、错误AttributeError:word.Application.Quit2、word文档中复选框的识别总结前言我并非一个专业的程序员,只是一个普通的编程爱好者、一只小菜鸟。得益于网络上各路大神</div> </li> <li><a href="/article/1903671335322710016.htm" title="C++徒手造国密SM算法!码农の头发消失术实录" target="_blank">C++徒手造国密SM算法!码农の头发消失术实录</a> <span class="text-muted">skyksksksksks</span> <a class="tag" taget="_blank" href="/search/C%2B%2B%E4%B8%AA%E4%BA%BA%E6%9D%82%E8%AE%B0/1.htm">C++个人杂记</a><a class="tag" taget="_blank" href="/search/%E7%89%A9%E8%81%94%E7%BD%91/1.htm">物联网</a><a class="tag" taget="_blank" href="/search/%E5%9B%BD%E5%AF%86%E7%AE%97%E6%B3%95/1.htm">国密算法</a><a class="tag" taget="_blank" href="/search/%E5%9B%BD%E5%AF%86/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/%E5%AF%86%E7%A0%81%E5%AD%A6/1.htm">密码学</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>【开场暴击:程序员的修仙之路】各位在秃头边缘疯狂试探的代码战士!今天我们要挑战史诗级成就——用纯C++手搓国家密码管理局钦定的SM2/SM3/SM4算法!没有现成库!没有外挂!只有头铁和即将离你而去的头发!(ง•̀_•́)ง【SM2加密:和椭圆曲线谈恋爱の玄学】这玩意儿就像追女神——你永远猜不透她的心思!来看加密の奥义三连:SM2加密vs追妹子对比表行为SM2加密流程追妹子流程第一步生成随机数k制</div> </li> <li><a href="/article/1903636538365898752.htm" title="Java对象的hashcode" target="_blank">Java对象的hashcode</a> <span class="text-muted">阿黄学技术</span> <a class="tag" taget="_blank" href="/search/Java%E5%9F%BA%E7%A1%80/1.htm">Java基础</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>在Java中,hashcode和equals方法是Object类的两个重要方法,它们在处理对象比较和哈希集合(如HashMap、HashSet)时起着关键作用。对于equals大部分Java程序员都不陌生,它通常是比较两个对象的内容(值)是否相等(==双等于比较对象的内存地址),如果是Object中的equals方法默认就是比较内存地址(在没有被重写的情况下和==一样)。hashCode方法返回对</div> </li> <li><a href="/article/1903633702395637760.htm" title="前端开发:这就是终点吗?" target="_blank">前端开发:这就是终点吗?</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AFjavascript/1.htm">前端javascript</a> <div>ReactHook深入浅出CSS技巧与案例详解vue2与vue3技巧合集VueUse源码解读让我们重新回到2021年后远程办公风潮兴起的日子,那时候,程序员岗位炙手可热。机会遍地都是,你甚至只需参加少量培训,通过面试后便能轻松收获年薪超15万的工作,还有余暇拍摄一段《程序员的一天》上传网络。经过短短一年左右的培训,你便踏上了年薪六位数的职业道路——那时候,当程序员似乎是一个人人羡慕的理想职业。然而</div> </li> <li><a href="/article/1903629480237264896.htm" title="python为什么需要文本编辑器-推荐几款高效的Python文本编辑器| 高效的文本编辑器的特点是什么..." target="_blank">python为什么需要文本编辑器-推荐几款高效的Python文本编辑器| 高效的文本编辑器的特点是什么...</a> <span class="text-muted">weixin_39991305</span> <div>我们都知道程序员花费大量的时间在编写、阅读和编辑代码上,因此一定要使用高效的文本编辑器才能够提高并很好的完成工作的效率和保证工作的质量。什么是高效的文本编辑器呢?除了自己用的得心应手外,小编认为还应该包含以下几个特点:·突出代码的结构,让你在编写代码时就能够发现常见的bug;·包含自动缩进功能;·显示代码长度的标志;·用于执行常见操作的快捷键;如果你是编程新手小白,小u非常建议你使用具备上述功能而</div> </li> <li><a href="/article/1903589872476680192.htm" title="《BUG生存指南》(有芝士的小说)" target="_blank">《BUG生存指南》(有芝士的小说)</a> <span class="text-muted">可问 可问春风</span> <a class="tag" taget="_blank" href="/search/%E9%87%8D%E7%94%9F%E4%B9%8B%E6%88%91%E6%9D%A5csdn%E5%86%99%E5%B0%8F%E8%AF%B4/1.htm">重生之我来csdn写小说</a><a class="tag" taget="_blank" href="/search/bug/1.htm">bug</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%B0%8F%E8%AF%B4/1.htm">计算机小说</a><a class="tag" taget="_blank" href="/search/%E5%B0%8F%E8%AF%B4/1.htm">小说</a> <div>《BUG生存指南》“叮咚!”小张的手机响了,他抬头看了一眼,是一条来自“程序员自救互助群”的消息:【紧急通知:今晚午夜12点,所有未解决的BUG将实体化,威胁程序员安全。请及时修复代码,祝你好运。】“什么鬼?”小张笑着放下手机,继续敲代码,“这谁的恶作剧?也太无聊了。”小张是一名初级程序员,刚入职一家互联网公司。他最近负责的是一款在线购物平台的支付系统。项目上线在即,但代码里还有一堆未解决的BUG</div> </li> <li><a href="/article/1903541533227937792.htm" title="探秘 Cookiecutter:一个高效项目模板生成器" target="_blank">探秘 Cookiecutter:一个高效项目模板生成器</a> <span class="text-muted">尤琦珺Bess</span> <div>探秘Cookiecutter:一个高效项目模板生成器cookiecutter项目地址:https://gitcode.com/gh_mirrors/coo/cookiecutter如果你是一位热衷于Python开发的程序员,或者你经常需要初始化新的项目,那么你可能会对感兴趣。这是一个强大的工具,它能够根据预定义的模板快速生成项目结构,极大地提高了开发效率。项目简介Cookiecutter是一个命令</div> </li> <li><a href="/article/1903494495006158848.htm" title="CAD开发经验总结" target="_blank">CAD开发经验总结</a> <span class="text-muted">我的sun&shine</span> <a class="tag" taget="_blank" href="/search/CAD%E4%BA%8C%E6%AC%A1%E5%BC%80%E5%8F%91/1.htm">CAD二次开发</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a> <div>作为一个拥有三年CAD二次开发经验的C++程序员,今天将积累的经验总结整理了一下,希望对二次开发人员有帮助,一个word文档,放到下载里面了,挣点积分,文档目录截个图</div> </li> <li><a href="/article/1903429075624587264.htm" title="【从零开始学习JAVA】异常体系介绍" target="_blank">【从零开始学习JAVA】异常体系介绍</a> <span class="text-muted">Cools0613</span> <a class="tag" taget="_blank" href="/search/%E4%BB%8E0%E5%BC%80%E5%A7%8B%E5%AD%A6Java/1.htm">从0开始学Java</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a> <div>前言:本文我们将为大家介绍一下异常的整个体系,而我们学习异常,不是为了敲代码的时候不出异常,而是为了能够熟练的处理异常,如何解决代码中的异常。异常的两大分类:我们就以这张图作为线索来详细介绍一下Java中的异常:1.Exceptions(异常)在Java中,Exception(异常)是一种表示非致命错误或异常情况的类或接口。Exception通常是由应用程序引发的,可以被程序员捕获、处理或抛出。E</div> </li> <li><a href="/article/1903423279465558016.htm" title="程序员学商务英语之Don‘t jinx it、l have a half mind to do sth、Don‘t change the subject、Quality over quantity.." target="_blank">程序员学商务英语之Don‘t jinx it、l have a half mind to do sth、Don‘t change the subject、Quality over quantity..</a> <span class="text-muted">李匠2024</span> <a class="tag" taget="_blank" href="/search/%E8%8B%B1%E6%96%87/1.htm">英文</a> <div>1463-Don'tjinxit.-别鸟鸦嘴A:Whatifitrainstheweekend?Youknow,theweather'sbeenchangeablethesedays!如果这个周末下雨怎么办?你知道,这些天的天气变化无常!B:Don'tiinxit.i'vespentalotoftimepreparingforthiscamping.lhopeitstaysfineforthewe</div> </li> <li><a href="/article/118.htm" title="异常的核心类Throwable" target="_blank">异常的核心类Throwable</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/%E6%BA%90%E7%A0%81/1.htm">源码</a><a class="tag" taget="_blank" href="/search/%E5%BC%82%E5%B8%B8%E5%A4%84%E7%90%86/1.htm">异常处理</a><a class="tag" taget="_blank" href="/search/exception/1.htm">exception</a> <div>java异常的核心是Throwable,其他的如Error和Exception都是继承的这个类 里面有个核心参数是detailMessage,记录异常信息,getMessage核心方法,获取这个参数的值,我们可以自己定义自己的异常类,去继承这个Exception就可以了,方法基本上,用父类的构造方法就OK,所以这么看异常是不是很easy package com.natsu; </div> </li> <li><a href="/article/245.htm" title="mongoDB 游标(cursor) 实现分页 迭代" target="_blank">mongoDB 游标(cursor) 实现分页 迭代</a> <span class="text-muted">开窍的石头</span> <a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a> <div>上篇中我们讲了mongoDB 中的查询函数,现在我们讲mongo中如何做分页查询      如何声明一个游标        var mycursor = db.user.find({_id:{$lte:5}});       迭代显示游标数</div> </li> <li><a href="/article/372.htm" title="MySQL数据库INNODB 表损坏修复处理过程" target="_blank">MySQL数据库INNODB 表损坏修复处理过程</a> <span class="text-muted">0624chenhong</span> <a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a> <div>最近mysql数据库经常死掉,用命令net stop mysql命令也无法停掉,关闭Tomcat的时候,出现Waiting for N instance(s) to be deallocated 信息。查了下,大概就是程序没有对数据库连接释放,导致Connection泄露了。因为用的是开元集成的平台,内部程序也不可能一下子给改掉的,就验证一下咯。启动Tomcat,用户登录系统,用netstat -</div> </li> <li><a href="/article/499.htm" title="剖析如何与设计人员沟通" target="_blank">剖析如何与设计人员沟通</a> <span class="text-muted">不懂事的小屁孩</span> <a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a> <div>最近做图烦死了,不停的改图,改图……。烦,倒不是因为改,而是反反复复的改,人都会死。很多需求人员不知该如何与设计人员沟通,不明白如何使设计人员知道他所要的效果,结果只能是沟通变成了扯淡,改图变成了应付。 那应该如何与设计人员沟通呢? 我认为设计人员与需求人员先天就存在语言障碍。对一个合格的设计人员来说,整天玩的都是点、线、面、配色,哪种构图看起来协调;哪种配色看起来合理心里跟明镜似的,</div> </li> <li><a href="/article/626.htm" title="qq空间刷评论工具" target="_blank">qq空间刷评论工具</a> <span class="text-muted">换个号韩国红果果</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a> <div> var a=document.getElementsByClassName('textinput'); var b=[]; for(var m=0;m<a.length;m++){ if(a[m].getAttribute('placeholder')!=null) b.push(a[m]) } var l</div> </li> <li><a href="/article/753.htm" title="S2SH整合之session" target="_blank">S2SH整合之session</a> <span class="text-muted">灵静志远</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><a class="tag" taget="_blank" href="/search/struts/1.htm">struts</a><a class="tag" taget="_blank" href="/search/session/1.htm">session</a> <div>错误信息: Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cartService': Scope 'session' is not active for the current thread; consider defining a scoped</div> </li> <li><a href="/article/880.htm" title="xmp标签" target="_blank">xmp标签</a> <span class="text-muted">a-john</span> <a class="tag" taget="_blank" href="/search/%E6%A0%87%E7%AD%BE/1.htm">标签</a> <div>今天在处理数据的显示上遇到一个问题: var html = '<li><div class="pl-nr"><span class="user-name">' + user + '</span>' + text + '</div></li>'; ulComme</div> </li> <li><a href="/article/1007.htm" title="Ajax的常用技巧(2)---实现Web页面中的级联菜单" target="_blank">Ajax的常用技巧(2)---实现Web页面中的级联菜单</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/Ajax/1.htm">Ajax</a> <div>在网络上显示数据,往往只显示数据中的一部分信息,如文章标题,产品名称等。如果浏览器要查看所有信息,只需点击相关链接即可。在web技术中,可以采用级联菜单完成上述操作。根据用户的选择,动态展开,并显示出对应选项子菜单的内容。 在传统的web实现方式中,一般是在页面初始化时动态获取到服务端数据库中对应的所有子菜单中的信息,放置到页面中对应的位置,然后再结合CSS层叠样式表动态控制对应子菜单的显示或者隐</div> </li> <li><a href="/article/1134.htm" title="天-安-门,好高" target="_blank">天-安-门,好高</a> <span class="text-muted">atongyeye</span> <a class="tag" taget="_blank" href="/search/%E6%83%85%E6%84%9F/1.htm">情感</a> <div>    我是85后,北漂一族,之前房租1100,因为租房合同到期,再续,房租就要涨150。最近网上新闻,地铁也要涨价。算了一下,涨价之后,每次坐地铁由原来2块变成6块。仅坐地铁费用,一个月就要涨200。内心苦痛。     晚上躺在床上一个人想了很久,很久。        我生在农</div> </li> <li><a href="/article/1261.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/%E9%80%8F%E6%98%8E%E5%BA%A6/1.htm">透明度</a><a class="tag" taget="_blank" href="/search/%E5%B9%B3%E7%A7%BB/1.htm">平移</a><a class="tag" taget="_blank" href="/search/%E7%BC%A9%E6%94%BE/1.htm">缩放</a><a class="tag" taget="_blank" href="/search/%E6%97%8B%E8%BD%AC/1.htm">旋转</a> <div>android的动画有两种  tween动画和Frame动画   tween动画;,透明度,缩放,旋转,平移效果   Animation   动画 AlphaAnimation 渐变透明度 RotateAnimation 画面旋转 ScaleAnimation 渐变尺寸缩放 TranslateAnimation 位置移动 Animation</div> </li> <li><a href="/article/1388.htm" title="查看本机网络信息的cmd脚本" target="_blank">查看本机网络信息的cmd脚本</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/cmd/1.htm">cmd</a> <div>@echo 您的用户名是:%USERDOMAIN%\%username%>"%userprofile%\网络参数.txt" @echo 您的机器名是:%COMPUTERNAME%>>"%userprofile%\网络参数.txt" @echo ___________________>>"%userprofile%\</div> </li> <li><a href="/article/1515.htm" title="plsql 清除登录过的用户" target="_blank">plsql 清除登录过的用户</a> <span class="text-muted">征客丶</span> <a class="tag" taget="_blank" href="/search/plsql/1.htm">plsql</a> <div>tools---preferences----logon history---history  把你想要删除的删除 -------------------------------------------------------------------- 若有其他凝问或文中有错误,请及时向我指出, 我好及时改正,同时也让我们一起进步。 email : binary_spac</div> </li> <li><a href="/article/1642.htm" title="【Pig一】Pig入门" target="_blank">【Pig一】Pig入门</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/pig/1.htm">pig</a> <div>Pig安装 1.下载pig   wget http://mirror.bit.edu.cn/apache/pig/pig-0.14.0/pig-0.14.0.tar.gz   2. 解压配置环境变量      如果Pig使用Map/Reduce模式,那么需要在环境变量中,配置HADOOP_HOME环境变量   expor</div> </li> <li><a href="/article/1769.htm" title="Java 线程同步几种方式" target="_blank">Java 线程同步几种方式</a> <span class="text-muted">BlueSkator</span> <a class="tag" taget="_blank" href="/search/volatile/1.htm">volatile</a><a class="tag" taget="_blank" href="/search/synchronized/1.htm">synchronized</a><a class="tag" taget="_blank" href="/search/ThredLocal/1.htm">ThredLocal</a><a class="tag" taget="_blank" href="/search/ReenTranLock/1.htm">ReenTranLock</a><a class="tag" taget="_blank" href="/search/Concurrent/1.htm">Concurrent</a> <div>为何要使用同步?      java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查),      将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用,      从而保证了该变量的唯一性和准确性。 1.同步方法&</div> </li> <li><a href="/article/1896.htm" title="StringUtils判断字符串是否为空的方法(转帖)" target="_blank">StringUtils判断字符串是否为空的方法(转帖)</a> <span class="text-muted">BreakingBad</span> <a class="tag" taget="_blank" href="/search/null/1.htm">null</a><a class="tag" taget="_blank" href="/search/StringUtils/1.htm">StringUtils</a><a class="tag" taget="_blank" href="/search/%E2%80%9C%E2%80%9D/1.htm">“”</a> <div>转帖地址:http://www.cnblogs.com/shangxiaofei/p/4313111.html   public static boolean isEmpty(String str)     判断某字符串是否为空,为空的标准是 str== null  或 str.length()== 0  </div> </li> <li><a href="/article/2023.htm" title="编程之美-分层遍历二叉树" target="_blank">编程之美-分层遍历二叉树</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/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%BC%96%E7%A8%8B%E4%B9%8B%E7%BE%8E/1.htm">编程之美</a> <div> import java.util.ArrayList; import java.util.LinkedList; import java.util.List; public class LevelTraverseBinaryTree { /** * 编程之美 分层遍历二叉树 * 之前已经用队列实现过二叉树的层次遍历,但这次要求输出换行,因此要</div> </li> <li><a href="/article/2150.htm" title="jquery取值和ajax提交复习记录" target="_blank">jquery取值和ajax提交复习记录</a> <span class="text-muted">chengxuyuancsdn</span> <a class="tag" taget="_blank" href="/search/jquery%E5%8F%96%E5%80%BC/1.htm">jquery取值</a><a class="tag" taget="_blank" href="/search/ajax%E6%8F%90%E4%BA%A4/1.htm">ajax提交</a> <div> // 取值 // alert($("input[name='username']").val()); // alert($("input[name='password']").val()); // alert($("input[name='sex']:checked").val()); // alert($("</div> </li> <li><a href="/article/2277.htm" title="推荐国产工作流引擎嵌入式公式语法解析器-IK Expression" target="_blank">推荐国产工作流引擎嵌入式公式语法解析器-IK Expression</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BA%94%E7%94%A8%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">应用服务器</a><a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/Excel/1.htm">Excel</a><a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F/1.htm">嵌入式</a> <div>这个开源软件包是国内的一位高手自行研制开发的,正如他所说的一样,我觉得它可以使一个工作流引擎上一个台阶。。。。。。欢迎大家使用,并提出意见和建议。。。 ----------转帖--------------------------------------------------- IK Expression是一个开源的(OpenSource),可扩展的(Extensible),基于java语言</div> </li> <li><a href="/article/2404.htm" title="关于系统中使用多个PropertyPlaceholderConfigurer的配置及PropertyOverrideConfigurer" target="_blank">关于系统中使用多个PropertyPlaceholderConfigurer的配置及PropertyOverrideConfigurer</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a> <div>1、PropertyPlaceholderConfigurer Spring中PropertyPlaceholderConfigurer这个类,它是用来解析Java Properties属性文件值,并提供在spring配置期间替换使用属性值。接下来让我们逐渐的深入其配置。 基本的使用方法是:(1) <bean id="propertyConfigurerForWZ&q</div> </li> <li><a href="/article/2531.htm" title="二叉树:二叉搜索树" target="_blank">二叉树:二叉搜索树</a> <span class="text-muted">dieslrae</span> <a class="tag" taget="_blank" href="/search/%E4%BA%8C%E5%8F%89%E6%A0%91/1.htm">二叉树</a> <div>    所谓二叉树,就是一个节点最多只能有两个子节点,而二叉搜索树就是一个经典并简单的二叉树.规则是一个节点的左子节点一定比自己小,右子节点一定大于等于自己(当然也可以反过来).在树基本平衡的时候插入,搜索和删除速度都很快,时间复杂度为O(logN).但是,如果插入的是有序的数据,那效率就会变成O(N),在这个时候,树其实变成了一个链表. tree代码: </div> </li> <li><a href="/article/2658.htm" title="C语言字符串函数大全" target="_blank">C语言字符串函数大全</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/function/1.htm">function</a> <div>C语言字符串函数大全     函数名: stpcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char *source); 程序例:   #include <stdio.h> #include <string.h>   int main</div> </li> <li><a href="/article/2785.htm" title="友盟统计页面技巧" target="_blank">友盟统计页面技巧</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/%E6%8A%80%E5%B7%A7/1.htm">技巧</a> <div>在基类调用就可以了, 基类ViewController示例代码 -(void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [MobClick beginLogPageView:[NSString stringWithFormat:@"%@",self.class]]; </div> </li> <li><a href="/article/2912.htm" title="window下在同一台机器上安装多个版本jdk,修改环境变量不生效问题处理办法" target="_blank">window下在同一台机器上安装多个版本jdk,修改环境变量不生效问题处理办法</a> <span class="text-muted">flyvszhb</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/jdk/1.htm">jdk</a> <div>window下在同一台机器上安装多个版本jdk,修改环境变量不生效问题处理办法 本机已经安装了jdk1.7,而比较早期的项目需要依赖jdk1.6,于是同时在本机安装了jdk1.6和jdk1.7. 安装jdk1.6前,执行java -version得到 C:\Users\liuxiang2>java -version java version "1.7.0_21&quo</div> </li> <li><a href="/article/3039.htm" title="Java在创建子类对象的同时会不会创建父类对象" target="_blank">Java在创建子类对象的同时会不会创建父类对象</a> <span class="text-muted">happyqing</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%88%9B%E5%BB%BA/1.htm">创建</a><a class="tag" taget="_blank" href="/search/%E5%AD%90%E7%B1%BB%E5%AF%B9%E8%B1%A1/1.htm">子类对象</a><a class="tag" taget="_blank" href="/search/%E7%88%B6%E7%B1%BB%E5%AF%B9%E8%B1%A1/1.htm">父类对象</a> <div>  1.在thingking in java 的第四版第六章中明确的说了,子类对象中封装了父类对象,   2."When you create an object of the derived class, it contains within it a subobject of the base class. This subobject is the sam</div> </li> <li><a href="/article/3166.htm" title="跟我学spring3 目录贴及电子书下载" target="_blank">跟我学spring3 目录贴及电子书下载</a> <span class="text-muted">jinnianshilongnian</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a> <div>    一、《跟我学spring3》电子书下载地址: 《跟我学spring3》  (1-7 和 8-13) http://jinnianshilongnian.iteye.com/blog/pdf     跟我学spring3系列 word原版 下载     二、 源代码下载 最新依</div> </li> <li><a href="/article/3420.htm" title="第12章 Ajax(上)" target="_blank">第12章 Ajax(上)</a> <span class="text-muted">onestopweb</span> <a class="tag" taget="_blank" href="/search/Ajax/1.htm">Ajax</a> <div>index.html <!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/</div> </li> <li><a href="/article/3547.htm" title="BI and EIM 4.0 at a glance" target="_blank">BI and EIM 4.0 at a glance</a> <span class="text-muted">blueoxygen</span> <a class="tag" taget="_blank" href="/search/BO/1.htm">BO</a> <div>http://www.sap.com/corporate-en/press.epx?PressID=14787   有机会研究下EIM家族的两个新产品~~~~   New features of the 4.0 releases of BI and EIM solutions include: Real-time in-memory computing – </div> </li> <li><a href="/article/3674.htm" title="Java线程中yield与join方法的区别" target="_blank">Java线程中yield与join方法的区别</a> <span class="text-muted">tomcat_oracle</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>长期以来,多线程问题颇为受到面试官的青睐。虽然我个人认为我们当中很少有人能真正获得机会开发复杂的多线程应用(在过去的七年中,我得到了一个机会),但是理解多线程对增加你的信心很有用。之前,我讨论了一个wait()和sleep()方法区别的问题,这一次,我将会讨论join()和yield()方法的区别。坦白的说,实际上我并没有用过其中任何一个方法,所以,如果你感觉有不恰当的地方,请提出讨论。 &nb</div> </li> <li><a href="/article/3801.htm" title="android Manifest.xml选项" target="_blank">android Manifest.xml选项</a> <span class="text-muted">阿尔萨斯</span> <a class="tag" taget="_blank" href="/search/Manifest/1.htm">Manifest</a> <div>结构 继承关系 public final class Manifest extends Objectjava.lang.Objectandroid.Manifest 内部类 class Manifest.permission权限 class Manifest.permission_group权限组 构造函数 public Manifest () 详细 androi</div> </li> <li><a href="/article/3928.htm" title="Oracle实现类split函数的方" target="_blank">Oracle实现类split函数的方</a> <span class="text-muted">zhaoshijie</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a> <div>关键字:Oracle实现类split函数的方 项目里需要保存结构数据,批量传到后他进行保存,为了减小数据量,子集拼装的格式,使用存储过程进行保存。保存的过程中需要对数据解析。但是oracle没有Java中split类似的函数。从网上找了一个,也补全了一下。 CREATE OR REPLACE TYPE t_split_100 IS TABLE OF VARCHAR2(100); cr</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>