精华内容
下载资源
问答
  • 为了进一步明确业务需求,减少软件开发中的错误及业务需求调整的困难,防止系统推倒重来的风险,我们对业务需求调研的文档编写提出下列要求,希望参照执行。 编写业务的调研人员必须精通或熟悉相关业务础知识,了解...

    业务需求调研文档内容结构参考  (附件

     

        为了进一步明确业务需求,减少软件开发中的错误及业务需求调整的困难,防止系统推倒重来的风险,我们对业务需求调研的文档编写提出下列要求,希望参照执行。

        编写业务的调研人员必须精通或熟悉相关业务础知识,了解计算机软件开发技术。编写结果方便业务人员理解,再由软件方需求人员转换成开发文档。

     

    一、业务运行当前情况描述

       1、业务当前情况运行描述,在各分、子公司、不同类型项目的差异;

       2、公司制度及对业务的规定,各分、子公司、项目部执行制度的明细规定;

       3、业务运行的组织机构及岗位,本项业务的应用范围。(总、分公司、项目部);

       4、业务单据及报表的收集情况;

       5、业务运行的时间要求:经常发生、期间发生(月、季、年)。

     

    二、业务需求的整理、优化及实现设计

       1、业务总体逻辑流程设计;

          与其它业务的接口,接口传递参数。

     

       2、不同业务单据审批流程设计;

          要求描绘流程图,及每步流程的参与岗位,角色与极限要求;

       2010060910172675.png

     

       3、基础数据设计:提供详细的基础数据。 

          如:合同分类   

    2010060910175711.png

      4、单据界面设计,单据编码规则 

          界面按使用要求进行设计,也可以使用工具(WORD 或其它)进行,

          明确字段(类型、精度,界面控件类型,必填要求? 空值要求?)。

          字段之间的数据关系:如: 单价*数量=金额,本期+上期末=本期末

          单据统一布局风格要求:按二列或三列布局,窗口扩大或缩减要求及控件要求。

     

       5、单据编号编码规则:是否可以修改,要求连继? 

          如:合同编码:  控制单元编码-组织单元助记码-年度(4位)-序列号(4位)

                          CD01-HQ1-2010-0001

     

       6、单据列表界面设计

          字段排列顺序,

          左树要求? 父子表展现?

     

       7、打印报表格式要求 (统一的格式,如果不同组织有要求,提供不同格式)

             格式按 WORD 的表格进行设计。

     

       8、业务预警参数设计

          要求: 预警条件设计,接收预警人员。

     

       9、查询报表条件参数设计,展现页面字段要求及顺序。

     

       10、全局性参数

           本项业务是否有多种场景要求全局性或项目级参数控制?

     

       11、BI 商业智能设计

           提供领导级(公司或部门)的综合商业智能分析,提供主管级的多维度业务深度分析。

      

       12、业务相关的权限角色的设计要求,用户权限(角色)分配的原则。

     

    三、测试数据设计(多种场景设计及数据)

        1、通用场景数据

        2、特殊场景数据

        3、基础数据

     

       如合同的数据场景应考虑下列因素:

       1)不同类型合同:工程、劳务(按甲供材料?)、机材采购、机材租赁(按时间台班、按工作量?)?

       2)合同单价可以在结算变化? 如油料(柴油)可能会不同月份的结算价有变化;

       3)金额的保留精确度(元、角、分),业务部门可以要求:劳务合同结算精确到,机材合同精确到。并影响财务部门的会计凭证。

       4)手工结算向系统自动计算,两者金额差异如何解决;

       5)结算过程步骤的差异(劳务合同有方程数量的确认单据,其它合同可能不需要),需要最终结算单据?

       6) 合同清单需要树形结构表达?

       7)合同变更(主体变更,金额(清单)变更、参数变更、拆分变更)。

       8)合同需要拆分到 WBS ? 变更需要拆分到WBS ?

     

    四、文档签认流程

       1、关键业务角色参与讨论并修订文档;(分公司、项目部有代表参与、推广小组)

           主持讨论由:业务部门或信息中心。依据人员水平决定。

           参与讨论有:实施组、系统组,软件开发商或咨询商代表参与。

       2、总部业务主管或部门领导签认;

       3、信息中心评审意见;   

       4、软件开发商或咨询商意见。

    转载于:https://www.cnblogs.com/zengxinle/archive/2010/06/09/1754552.html

    展开全文
  • uml 文档 访问者模式

    2011-06-22 21:57:14
    对于系统中一个已经完成的类层次结构,我们已经给它提供了满足...如果这是为数不多的几次变动,而且你不用为了一个需求的调整而将整个类层次结构统统地修改一遍,那么直接在原有类层次结构上修改也许是个不错的主意。
  • [OPENCV]001.文档目录

    2021-04-10 14:04:20
    ​ 一个定义基本数据结构的紧凑模块,包括密集的多维数组和所有其他模块使用的基本功能。 ​ 在本节中,您将了解这个库的基本构建块。为了理解如何在像素级上操作图像,因此必须阅读。 图像处理(imgproc模块) ​ ...

    参考文档:https://docs.opencv.org

    OpenCV概论

    ​ 将学习如何在您的计算机上安装OpenCV

    核心功能(core模块)

    ​ 一个定义基本数据结构的紧凑模块,包括密集的多维数组和所有其他模块使用的基本功能。

    ​ 在本节中,您将了解这个库的基本构建块。为了理解如何在像素级上操作图像,因此必须阅读。

    图像处理(imgproc模块)

    ​ 图像处理模块,包括线性和非线性图像滤波、几何图像变换(调整大小、仿射和透视变形、基于表格的通用重映射)、色彩空间转换、直方图等。

    ​ 在本节中,您将了解OpenCV中的图像处理(操作)函数。

    高级GUI和媒体(highgui模块)

    ​ 一个易于使用的界面,具有简单的UI功能。本节包含关于如何使用库的内置图形用户界面的有价值的教程。

    图像输入输出(imgcodecs模块)

    ​ 在本节中,展示了如何使用imgcodecs模块读写图像。

    视频输入输出(videoio模块)

    ​ 一个易于使用的界面,以视频捕获和视频编解码器。在本节中,展示了如何使用videio模块读和写视频。

    摄像机标定与三维重建(calib3d模块)

    ​ 基本的多视图几何算法,单摄像机和立体摄像机标定,目标姿态估计,立体对应算法,三维重建的要素。虽然我们的大多数图像是2D格式的,但它们确实来自3D世界。在本节中,你将学习如何从2D图像中找到3D世界信息。

    2D功能框架(feature2d模块)

    ​ 显著特征检测器、描述符和描述符匹配器。了解如何使用OpenCV中的特征点检测器、描述符和匹配框架。

    视频分析(video模块)

    ​ 视频分析模块,包括运动估计,背景减法,和目标跟踪算法。在这里,您将发现算法可用在您的视像流,如运动提取,特征跟踪和前景提取。

    目标检测(objdetect模块)

    ​ 检测预定义类的对象和实例(例如,人脸、眼睛、杯子、人、汽车等)。你有没有想过你的数码相机是如何检测人脸的?看看这里就知道了!

    深度神经网络(dnn模块)

    这些教程展示了如何有效地使用dnn模块。

    机器学习(ml模块)

    使用强大的机器学习类对数据进行统计分类、回归和聚类。

    图形API (gapi模块)

    学习如何使用图形API (G-API)和从“传统”OpenCV到图形模型的端口算法。

    计算摄影(photo模块)

    使用OpenCV进行高级照片处理。

    图像拼接(stitching模块)

    了解如何创建美丽的照片全景和更多与OpenCV缝合管道。

    GPU加速计算机视觉(cuda模块)

    利用显卡的能力运行OpenCV算法,从您的系统中挤出每一点计算能力。

    展开全文
  • 这为两个文档提取了一个相关结构(从而避免了过度训练),然后使用向量空间分析对其进行比较,以给出一个文档属于另一个文档的范围(从而避免信息不足)。 此方法可用于通过合并某些类别的文本来创建用户定义的类,...
  • Word文档一般而言由 文档(document) - 段落(paragraph) - 文字块(run)三级结构组成:从需求反馈中可以看出,本质上我们需要做的就是对所有 含有 资金 的文字块Run进行 样式调整因此,本需求的逻辑如下:1...

    每一份Word文档中的内容如下:

    30ad32deb7878aeeb32658991741b043.png

    为了方便后续审阅,需要将所有文档中所有 含有资金的语句 标红加粗,如图所示

    c6a015e4b4134bc78a31178727c05f27.png

    三、步骤分析和前置知识

    为了解决这个需求简单复习一下相关知识。Word文档一般而言由 文档(document) - 段落(paragraph) - 文字块(run)三级结构组成:

    f92c49eb680ca60539dfec4ceceb54f4.png

    从需求反馈中可以看出,本质上我们需要做的就是对所有 含有 资金 的文字块Run进行 样式调整

    因此,本需求的逻辑如下:

    1.创建一个空文件夹(用于存放修改后的财务报告,避免直接对原文件修改)

    2.通过 glob 获取目标文件夹下的所有Word路径

    3.利用 docx 模块对每个Word文档遍历,并获取包含特定词的文字块

    4.对文字块进行样式修改

    1.创建一个空文件夹(用于存放修改后的财务报告,避免直接对原文件修改)

    2.通过 glob 获取目标文件夹下的所有Word路径

    3.利用 docx 模块对每个Word文档遍历,并获取包含特定词的文字块

    4.对文字块进行样式修改

    1.创建一个空文件夹(用于存放修改后的财务报告,避免直接对原文件修改)

    2.通过 glob 获取目标文件夹下的所有Word路径

    3.利用 docx 模块对每个Word文档遍历,并获取包含特定词的文字块

    4.对文字块进行样式修改

    首先导入需要的库并设置目标文件夹路径

    fromdocx importDocument

    fromdocx.shared importRGBColor, Pt, Cm

    importos

    importglob

    # 此处更换创建文件夹的路径

    mkdir_path = r'C:Usersxxxnew_dir'

    # 此处更换所有文件所在的位置

    file_path = r'C:Usersxxx'

    os 和 glob 我们都很熟悉,这里简单介绍一下 docx 模块这是一个非标准库,在命令行中我们需要输入以下命令安装:

    pip install python-docx

    尤其要注意安装时候输入的是 python-docx ,而实际调用时为 docx

    实例化具体的Word文档代码为:

    fromdocx importDocument

    wordfile = Document(path)

    如果不指定路径则为创建新的Word文档,这点跟操作Excel的 openpyxl 不太一样,有机会再做介绍。

    现在我们 建立文件夹存放新生成的文件,首先判断文件夹是否存在,不存在时再运行 os.mkdir 避免报错

    ifnotos.path.exists(mkdir_path):

    os.mkdir(mkdir_path)

    接着 遍历Word文档,利用 glob 模块的通配符,框架如下:

    forfile inglob.glob(file_path + '/*.docx'):

    pass

    根据三级结构,一个文档 Document 有一个或多个段落 Paragragh ,一个段落 Paragraph 有一个或多个文字块 Run ,合起来代码为:

    forfile inglob.glob(file_path + '/*.docx'):

    docx = Document(file)

    forparagraph indocx.paragraphs:

    forrun inparagraph.runs:

    pass

    最后我们 针对特定词修改样式,遍历到文字块后就可以做判断了

    ...

    forrun inparagraph.runs:

    if'资金'inrun.text:

    run.font.bold = True# 加粗

    run.font.color.rgb = RGBColor( 255, 0, 255) # 设置字体颜色

    # 最后切记保存

    docx.save(mkdir_path + '/'+ os.path.basename(file))

    当然,除了修改字体颜色和加粗之外,还支持其他样式的设置,以下列出常用的作为参考:

    # 加粗

    run.font.bold = True

    # 斜体

    run.font.italic = True

    # 下划线

    run.font.underline = True

    # 删除线

    run.font.strike = True

    # 字号

    run.font.size = Pt( 20)

    # 阴影

    run.font.shadow = True

    # 字体颜色

    run.font.color.rgb = RGBColor( 255, 0, 255)

    至此,整个需求就顺利结束了,附上完整代码:

    fromdocx importDocument

    fromdocx.shared importRGBColor, Pt, Cm

    importos

    importglob

    mkdir_path = r'C:xxxnew_dir)'

    ifnotos.path.exists(mkdir_path):

    os.mkdir(mkdir_path)

    keyword = '资金'

    file_path = r'C:Usersxxx'

    forfile inglob.glob(file_path + '*.docx'):

    docx = Document(file)

    forparagraph indocx.paragraphs:

    forrun inparagraph.runs:

    ifkeyword inrun.text:

    run.font.bold = True

    run.font.color.rgb = RGBColor( 255, 0, 0)

    docx.save(mkdir_path + '/'+ os.path.basename(file))

    五、写在最后

    通过本文的Python自动化脚本制作过程,我们可以再次体会Python办公自动化的强大!如果对自动化代码和数据感兴趣可以在作者的Github上获取。

    https://github.com/liuhuanshuo/zaoqi-Python

    当然除了调整Word字体颜色,其他的大多数样式调整都可以使用Python完成,也可以与Excel和PPT结合,这些就留给读者自己开发。

    最后还是希望大家能够理解Python办公自动化的一个核心就是 批量操作-解放双手,让复杂的工作自动化!

    展开全文
  • 在本文中,我从文档对象模型的角度分析 Web 页面的结构:检查子节点和父节点,以及向现有文档添加并编辑节点。为了演示这个过程,我将构建一个页面。用户可以在这个页面上任意创建注释并编辑这些注释的内容(这个...

    为什么使用 DOM 而不使用 DHTML?

    在本文中,我从文档对象模型的角度分析 Web 页面的结构:检查子节点和父节点,以及向现有文档添加并编辑节点。为了演示这个过程,我将构建一个页面。用户可以在这个页面上任意创建注释并编辑这些注释的内容(这个页面不会很复杂;我将把一些任务留给您,比如保存和移动内容以及重新调整内容的大小等)。既然使用 DHTML 技术就可以轻松实现这些操作,为什么还要使用 DOM 呢?

    开发 XML 的其中一股推动力是将 HTML 片段化,而 DHTML 顺应了这一潮流。虽然某些方面已经形成标准,但浏览器如何处理不同的方面仍然存在很大的分歧。DOM 是可以在整个领域范围内实现的标准接口集,因此编程人员只需编写一个版本的页面。

    另外,Web 页面不断朝 XML 的方向发展。XHTML 1.0 只是由 HTML 4.0.1 改编而来的 XML,并且也越来越多地使用 XML 生成 Web 页面。最终,DOM 将是在这些页面内访问元素和文本的主要技术(也可将它用于 XSLT 样式表)。

    基础页面

    让我们从基础的页面开始,该页面包含一个工作区域和表单,它显示了已创建注释的数量:


    清单 1. 基础页面
                    
    
    <html>
      <head>
        <title>Getting Sticky</title>
        <style type="text/css">
          * {font-family: sans-serif}
          a {font-size: 6pt}
          .editButton {font-size:6pt}
        </style>
    
      </head>
      <body>
        <div id="mainDiv" style="height:95%; width:95%; border:3px solid red; 
                                                               padding: 10px;">
        
           <h1>Getting Sticky</h1>
    
           <form id="noteForm">
               Current number of notes:
                           <input type="text" name="total" value="0" size="3"/>
               <input type="button" value="Add a new note"/>
           </form>
    
        </div>
      </body>
    </html>

    清单 1 展示了带有几种样式(只是为了使页面好看些)的基础页面。页面的正文包括一个单个的 div 元素,该元素包含一个 heading 元素(h1)和一个 form 元素。即使是在没有使用 DOM 的浏览器里,也可以在表单内访问信息。


    图 1. 基础页面
    基础页面 

    使用 DHTML

    使用 DHTML 可以访问甚至修改表单字段的信息。例如,您可以创建一个脚本将当前表单的值增加 1,然后告诉页面在用户点击按钮时执行这个脚本:


    清单 2. 增加当前的数值
                    
    
    <html><head>
        <title>Getting Sticky</title>
        <style type="text/css">
          * {font-family: sans-serif}
          a {font-size: 6pt}
          .editButton {font-size:6pt}
        </style>
    
        <script type="text/javascript">
          function incrementCurrent() {
            current = parseInt(document.forms["noteForm"].total.value);
            document.forms["noteForm"].total.value = current + 1;
          }
        </script>
    
      </head><body>
        <div id="mainDiv" style="height:95%; width:95%; border:3px solid red; 
                                                               padding: 10px;">
        
           <h1>Getting Sticky</h1>
    
           <form id="noteForm">
               Current number of notes:
                          <input type="text" name="total" value="0" size="3"/>
               <input type="button" value="Add a new note" 
                                                 οnclick="incrementCurrent()"/>
           </form>
    
        </div>
    </body></html>

    在 清单 2 中,incrementCurrent() 函数接受文档对象,然后将 noteForm 对象从页面内的表单数组中抽出。该函数从 noteForm 对象获得表单字段 total 并检索值,然后在页面内更新这个值。

    这种更改是即时的。更改页面、重新加载并反复按按钮,您将发现文本字段每一次都会相应地进行更新。

    同样,您也可以使用 DHTML 属性检索 div 元素的文本。由于它有一个 mainDiv 的 id,因此可以使用 innerHTML 属性,如:

    theText = mainDiv.innerHTML;

    在这个例子中,使用了两个 DHTML 技术:forms 数组,以及通过基于属性值的名称调用元素(而不是通过元素名或总体结构)。但存在的问题是这种方法不够通用。虽然可以对表单的名称使用一个变量,如果碰到不使用表单的呈现,应该怎么办呢?

    DOM 和 JavaScript

    如果存在一个定义文档对象模型的原则,它将把信息排列成父-子层次结构。例如,参看以下的 XML:

    <parentElement><childElement>My Text Node</childElement></parentElement>

    有 3 个节点:root 节点是 parentElement。它有一个子元素 childElementchildElement 元素有自己的父元素 parentElement,作为子元素的文本节点的值是 “My Text Node”。这个文本节点的父元素是 childElement。共享一个父元素的两个节点称为兄弟(sibling)节点。注意,文本就是它本身的节点。元素实际上并没有值,它们仅有文本子节点。

    您应该比较熟悉如何使用 Java 技术或其他语言读取 XML 文档的结构。实施这个操作要用到一个带有定义良好的函数和对象属性的 API。例如,这个文档有一个作为其根元素的 html 元素,该元素有两个子元素 head 和 body(为简单起见,我删除了正常情况下会出现在这些元素之间的空格;至于如何处理这些空格,不同的浏览器之间还没有达成一致)。要通过 Java 技术访问 body 元素,您可以使用几个不同的表达式,假如您已经命名了 Document 对象 document

    第一个步骤是获得所有元素的子元素的列表,然后从该列表选择一个特定的条目,就像以下的例子一样:

    bodyElement = document.getChildNodes().item(0).getChildNodes().item(1);

    在这里,首先获得 html 元素(该元素是文档的第一个子元素),然后获得它的第二个子元素 bodygetChildNodes() 是基于零的)。另一种办法是将 html 元素作为第一个子元素直接访问,然后移动到它的第一个子元素(head),最后移动到该元素的下一个兄弟元素(第二个子元素 body):

    bodyElement = document.getFirstChild().getFirstChild().getNextSibling();

    从这里您可以获得节点的类型:

    typeInt = bodyElement.getNodeType()

    节点类型以整数返回,并且允许您适当地处理每一个节点;一个元素(类型 1)有名称没有值,但是一个文本节点(类型 3)有值没有名称。

    了解了这些后,就可以获取元素的名称:

    elementName = bodyElement.getNodeName();

    或它的文本内容:

    elementContent = bodyElement.getFirstChild().getNodeValue();

    (记住,元素的文本本身就是一个节点,而该元素则是它的父节点)。

    当将这些函数移动到 JavaScript 时,相同的基本 API 已经准备就绪,但处理方式有些不同。例如,可以直接访问属性,而不是通过get 和 set 方法访问,因此 JavaScript 中的相同语句会表示为:

    bodyElement = document.childNodes.item(0).childNodes.item(1);
    bodyElement = document.firstChild.firstChild.nextSibling;

    您可以从这里获得元素的类型和名称及其内容:

    ElementType = bodyElement.nodeType;
    elementName = bodyElement.nodeName;
    elementContent = bodyElement.firstChild.nodeValue;

    但是需要注意,只能更改属性的名称。返回对象的函数保持不变。例如,可以根据 ID 检索某个特定的对象,就像下面的示例一样:

    formElement = document.getElementById("noteForm");

    这只是基本原理,现在我们看看它的实际运行情况。

    添加新的注释

    实际节点本身只是一个带有标准文本和链接的框,这个框允许用户稍后再编辑文本,如 图 2 所示。


    图 2. 新的节点
    新的节点 

    这个新节点与下面的 HTML 等效:


    清单 3. 目标 HTML
                    
    
    <div id="note1" style="width: 100; height:100; border: 1px solid blue; 
                           background-color: yellow; position: absolute; 
                           top: 150; left: 135">
        <a href="javascript:editNote('note1')">edit</a>
        <br />
        New note
    </div>

    使用标准的 DOM 添加实际元素,如 清单 4 所示:


    清单 4. 添加新的注释元素
                    
    
    <html>
      <head>
        <title>Getting Sticky</title>
        <style type="text/css">
          * {font-family: sans-serif}
          a {font-size: 6pt}
          .editButton {font-size:6pt}
        </style>
    
        <script type="text/javascript">
    ...
          function getCurrentNumber() {
            formElement = document.getElementById("noteForm");
            return formElement.childNodes.item(1).value;
          }
    
          function makeNewNote(){
            mainDivElement = document.getElementById("mainDiv");
    
            newNote = document.createElement("div");
            newNote.setAttribute("id", "note"+getCurrentNumber());
    
            mainDivElement.appendChild(newNote);
    
            incrementCurrent();
    
          }
        </script>
      </head>
      <body>
        <div id="mainDiv" style="height:85%; width:85%; border:3px solid red; 
                                                 padding: 10px; z-index: -100" >
        
           <h1>Getting Sticky</h1>
    
           <form id="noteForm">
               Current number of notes  <input type="text" name="total" value="0" 
                                                 size="3"/>
               <input type="button" value="Add a new note" 
                                                 οnclick="makeNewNote()"/>
           </form>
    
        </div>
      </body>
    </html>

    在这个示例中,更改了按钮从而执行 makeNewNote() 而不是 incrementCurrent(),尽管 makeNewNote() 还使用该函数。首先,通过getElementById() 获得针对主元素 div 的引用,这个元素最终会包含注释。然后可以使用 document 对象创建一个名为 div 的新元素,就像在其他语言中一样。要设置 id 属性,您只需要在新的元素上使用 setAttribute() 方法。

    每一个注释都有一个独特的 id 属性,因此您需要知道当前的总和是多少。要获得这个信息,必须从 form 元素本身开始。可以从这里获取子元素列表。第一个(带有一个索引 0)是文本,第二个是(带有一个索引 1)是实际的 input 元素。

    但 .value 又是什么呢?是不是输入错误?它应该是 nodeValue,是吗?

    实际上不是。记住,元素没有值。乍一看,好像我将 DOM 和 DHTML 属性混在一起,但实际上现在获取的元素不仅是org.w3c.dom.Element 的实现,还是 org.w3c.dom.html.HTMLInputElement(它也包含了一个代表表单字段值的值属性)的实现。在这一方面,DOM 模仿了一些(虽然不是全部)通过 DHTML 可以实现的属性。

    设置了属性之后,只需要将新的 div 元素附加到 mainDiv 元素,div 元素将出现在这个位置上。或者,如果它有任何显示属性或文本的话,它至少会出现在这个位置上。

    要添加样式信息,将需要实际使用 DHTML 样式对象:


    清单 5. 添加样式信息
                    
    
    ...
          function makeNewNote(){
            mainDivElement = document.getElementById("mainDiv");
    
            newNote = document.createElement("div");
            newNote.setAttribute("id", "note"+getCurrentNumber());
    
            newNote.style.width="100";
            newNote.style.height="100";
            newNote.style.border="1px solid blue";
            newNote.style.backgroundColor="yellow";
            newNote.style.position="absolute";
            newNote.style.top=(150);
            newNote.style.left=(25 + 110*getCurrentNumber());
    
            mainDivElement.appendChild(newNote);
    
            incrementCurrent();
    
          }
    ...

    添加的结果是产生一个蓝边的黄色小框,如 图 3 所示。


    图 3. 空的框
    空的框 

    注意,注释的 left 属性取决于当前注释的数量,它随着每个注释的添加而增长。您可以通过这种方式添加一系列框,如 图 3 所示。

    添加内容

    添加 div 的内容会呈现一个小问题。我可以使用 innerHTML 属性:


                    
    
    newNote.innerHTML = "<a href=\"javascript:editNote('note"  
                         +getCurrentNumber()+")\">edit</a><br />New note";

    但我如何直接使用 DOM 方法来实现?首先想到的可能是简单地设置 div 元素的文本子节点的值:


                    
    
    noteText = document.createTextNode(
              "<a href=\"javascript:editNote('note"+getCurrentNumber()+")\">"+
              "edit</a><br />New note");
    newNote.appendChild(noteText);

    虽然文本真的得到了添加,但结果可能与预期不同,如 图 4 所示。


    图 4. 框中的文本
    框中的文本 

    问题是您并没有真的添加文本,而是混合了内容,包括文本和元素。浏览器认为您将这看作是 CDATA(完全按照字面意义得出),并且也没有创建元素。不是简单地在一个块中添加所有的内容,您必须实际添加每个元素:


    清单 6. 添加内容
                    
    
    ...
      function makeNewNote(){
        mainDivElement = document.getElementById("mainDiv");
    
        newNote = document.createElement("div");
        newNote.setAttribute("id", "note"+getCurrentNumber());
    ...
    
          editLink = getEditLink("note"+getCurrentNumber());
          newNote.appendChild(editLink);
          newNote.appendChild(document.createElement("br"));
     
          noteText = document.createTextNode("New Form");
          newNote.appendChild(noteText);
    
        mainDivElement.appendChild(newNote);
    
        incrementCurrent();
    
      }
    
        function getEditLink(thisId){
          editLink = document.createElement("a");
          linkText = document.createTextNode("edit");
    
          editLink.setAttribute("href", "javascript:editNote('"+thisId+"')");
            
          editLink.appendChild(linkText);
          return editLink;
        }
    ...

    首先,您已经创建了一个返回一个对象的新函数 getEditLink。这个对象是用标准 DOM 方法创建的 a 元素。接下来,添加一个标准的 break 标记 br,最后添加包含实际节点文本的节点。

    结果是得到完成的节点,而元素保持完整并可使用。

    更改现有的节点

    现在有了内容,但怎样才能更改它呢?因为您单个地添加元素,所以只能编辑代表节点文本的单个文本节点。这可以通过 3 种方式来实现。首先删除有问题的节点,然后添加一个新的节点:


    清单 7. 删除节点并添加一个新的节点
                    
    
    ...
          function editNote(editLink){
            theDiv = document.getElementById(editLink);
            newText = prompt("What should the note say?");
    
            oldNode = theDiv.firstChild.nextSibling.nextSibling;
            theDiv.removeChild(oldNode);
    
            newNode = document.createTextNode(newText);
            theDiv.appendChild(newNode);
    
          }
    ...

    另一种方法很简单,只需代换现有的节点:


    清单 8. 替换一个节点
                    
    
    ...
          function editNote(editLink){
            theDiv = document.getElementById(editLink);
            newText = prompt("What should the note say?");
    
            oldNode = theDiv.firstChild.nextSibling.nextSibling;
            newNode = document.createTextNode(newText);
            theDiv.replaceChild(newNode, oldNode);
          }
    ...

    在这个示例中,用 newNode 代替了 oldNode,同时也相应地更改了文档。

    最后一个办法是更改现有节点的文本:


    清单 9. 更改现有的节点
                    
    
    ...
          function editNote(editLink){
            theDiv = document.getElementById(editLink);
            newText = prompt("What should the note say?");
    
            theDiv.firstChild.nextSibling.nextSibling.nodeValue=newText;
          }
    ...

    因为 editNote 使用相应的 div 的 id 值作为参数,相同的函数可以用于任意节点,如 图 5 所示。


    图 5. 最后的页面
    最后的页面 

    结束语

    在本文,您已经了解在 Web 页面的 JavaScript 中使用 DOM 的基础知识。您可以在使用 JavaScript 的地方(比如在 XSLT 样式表中)使用这些基本原理。

    文档对象模型将 XML 文档内的元素、文本和其他类型的节点呈现为一系列的父子关系。操作这些单独的节点可以影响页面本身。除了 DOM Core 方法以外,XHTML 页面也可以公开作为 DOM HTML 模块的一部分的属性和方法,DOM HTML 模块试图整合许多编程人员用了好几年的 DHTML 属性。

    展开全文
  • 此外,为了满足更多的需求,iDoc 还正在积极地支持更多的非TWAIN扫描仪,如Fijitsu ScanSnap fi-4110EOX 和 fi-5110EOX. 强大的图像处理功能 iDoc 有强大的图像处理功能,可以处理任意黑白、灰度、彩色图像。...
  • WebCore目录结构

    2012-03-25 15:59:53
    另一方面,我们正在对代码的目录结构进行调整。现在,WebCore模块拥有一个khtml目录和一个ksvg2目录。虽然,在KDE项目中,这两个目录的内容属于两个不同的模块,但是,在Webkit里,我们已经将这两个模块整合在一起...
  • 利用空频码结构和载波间干扰能量分布特点,提出在发射端调整空频码相对位置,在接收端进行多次频率搬移和相应的FFT变换,能有效对抗多个载波频率偏移。在此基础上采用Q抽头滤波算法,以较低的算法复杂度实现了接近于...
  • 数据结构课设

    2013-01-03 02:51:25
    课程设计题目 一、必做题。 1、链表排序 任务 : (1)从文件读入30个无序整数,建立一个单链表,排序输出、再倒序输出。 (2)从文件A读入30个无序整数,建立...10.课程设计报告的电子文档在检查后一周内上交班长。
  • 此模型主要研究上海与长三角地区经济发展的相关性以及上海对长三角地区各行业发展和产业结构调整的作用。通过分析,最终得出上海与长三角其他地区经济增长具有很强的相关性,并且上海产业结构转型等方面对长三角地区...
  • 随着我国经济结构调整的深入,对企业节能减排的要求更加严格,企业只有通过强化环境保护的自我约束机制,来降低产品和生产过程相关的环境污染所带来的生产经营风险。绿色供应链管理能使整个供应链的资源消耗和环境负...
  • 超级有影响力的Java面试题大全文档 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。...
  • 很详细的word文档哦。。供学习参考 为了使读者对本资料所描述的内容有直接的理解,这里从总结的角度出发,给出了深入了解Oracle8i/9i的管理所需的准备知识小结,如果读者对基本的概念已经很熟悉,则可以跳过本章。 ...
  • 国际经济结构调整,经济全球化的加速,必将促进港口间国际贸易的发展与运量的增长[1]。 随着计算机管理技术的高速发展,各个领域都应用计算机对相关信息进行管理。本系统是一个复杂而且涉及内容众多的系统,码头...
  • <code>push跟<code>unshift也可以互换以调整优先级,甚至用可以用<code>splice方法更精细的控制<code>stack数组。循环模式比递归模式更可控。 子场景2:异步模式 方案1:过程式 Promise <pre>...
  • 一些新功能和项目结构也在不断的调整。 欢迎提出问题,谢谢。 依赖大小参考 建议使用ndk过滤,详细参考 参考第四条 : 4、NDK的so支持 非常感谢您的支持 撸码不易,如果对你有所帮助,欢迎您的赞赏 GSY新书...
  • 在本书第1版出版时隔4年后,Thomas Kyte及时了解了大家的这一迫切需求,根据他的实战经验以及人们最关心的问题对这本书做了全面补充和调整,以涵盖11g最受关注的多项特性。例如11g引入dbms_parallel_execute包来帮助...
  • html5语义化元素解释及使用场景

    千次阅读 2019-07-08 19:45:30
    在HTML5之前,都是使用表格、div元素来进行布局,为了使文档结构更加清晰明确,HTML5增加了文档结构关联的结构元素,可以直接定义元素容器的内容,页面结构可以调整的非常清晰,这不仅利于开发者后期维护扩展,更...
  • 为了提高论坛性能,部分功能使用数据库分表设计,默认分为4个表,表中有数据后不建议再调整分表数量。程序带有图形安装界面,第一次使用需执行安装操作。前台所有页面均支持返回HTML和JSON格式数据,API接口文档可在...
  • CSS层叠样式表介绍

    2009-05-20 10:09:27
    DHTML(Dynamic HTML):以HTML语言为基础,使用JavaScript控制网页元素,利用CSS层叠样式表进行布局传统的Web的HTML页面文档结构和显示格式一直是混在一起的。这些给页面开发和调整带来了不便。HTML对网页的调整是粗糙...
  • 为了后续图片能够容易上CDN,如果您需要在文档中约会新的图片,请按如下步骤操作: 将您的图片大小进行调整,有一个要求是图片高度最大不能超过500像素,原则上单张图片最大不能超过300K。 将图片复制到docs / imgs...
  • 有时候我们会碰到文档最后一页只有几行的情况,为了避免打印时的尴尬,我们可能需要不断的去前面找多余的空行删掉,那样有可能改变文章的结构。其实最简单的方法是保持整篇文档页边距不变的情况下,对倒数第二页的...
  • 主要应用场景是,当用户创建了各种文档,但是因为各种原因调整了她的位置,例如从一个lib move到了另外一个lib(同一个site collection下面),或者同一个lib里面的不同folder的move,为了结构调整。但是在SharePo...
  • LATEX学习

    2019-09-04 15:16:37
    为了学习排版 粘一些自己需要的部分 原文链接在下一行 原文链接添加链接描述 大神的主页添加链接描述 latex公式速查公式速查 ...在文档类 article/ctexart 中,定义了五个控制序列来调整行文组织结构...
  • 拖放效果系列 二

    2011-01-17 10:05:11
    这样一旦文档结构发生变化就要调整JS代码,没有做到JavaScript与HTML分离的原则。 所以应该实现一个可以适用于多个元素的拖拽代码,而且代码在可拖拽元素改变后应该不需要修改而仍然能正常工作。 使用class做“钩子...
  • 算法导论史上最全的全集

    热门讨论 2011-11-06 09:31:57
    而且,我精心调整文档的大小,打开或点击标签的时候,默认就是最适合阅读、眼睛最舒服的文档大小,无需再调整大小。 本人亲自制作,在CSDN上奉献,欢迎使用!有了目录(标签),学习效率真的可以提高一大截啊! ...
  • 前言",并把文档标识设置为"ch0.md",同时目录结构还按照你的这个来调整和排序。 注意: 必须要有<bookstack-summary></bookstack-summary>,这样是为了告诉程序,我这个summary.md的文档,是用来...
  • 为了建立一个充满活力、不断发展且令人兴奋的项目,社区需要让更多人参与到治理、文档编写、代码创建以及结构调整的工作中来。 尽管很多项目打着“开放一切”的旗号,但其基础设施的大门却往往拒绝访问。通常情况下...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 193
精华内容 77
关键字:

为了调整文档结构