HTML5--Range对象的基本操作(5)

前言:

  这节课主要学习HTML5中关于Range对象的常用API。

  1.Range对象初识

    作用:一个Range对象代表页面上的一段连续区域。通过Range对象,可以获取或修改网页上的任何区域。

    Rnage对象示例

<body>
    Range对象初识</br>
    <input id="btn" type="button" value="提交">
    <div id="showRange"></div>
    <script>
        function $(ele) {
            return document.getElementById(ele)
        }
        var btn = $('btn')
        var showRange = $('showRange')
        var html;
        btn.onclick = function (){
            // 通过getSelection()方法,获取selection对象
            var selection = document.getSelection()
            // 通过rangeCount属性,获取选中内容的个数
            var count = selection.rangeCount
            html = '你选中了' + count + '段内容.'
            if (count > 0) {
                for (var i = 0; i < count; i++){
                    // 通过getRangeAt()方法,获取具体range对象
                    var range = selection.getRangeAt(i)
                    html += '' + (i+1) + '段内容为:' + range + '</br>'
                }
            }
            showRange.innerHTML = html
        }
    </script>
</body>

  2.Range对象的selectNode/selectNodeContents/deleteContents方法

    方法:

      selectNode(node) --  获取指定节点

      selectNodeContents(node) -- 获取指定节点内容

      deleteContents --- 删除range选中的节点(或内容) 

    Rnage方法示例

<body>
    <div id="testRange" class="range" style="background-color:pink; width: 50%; height: 40px"> 
        测试Range对象的selectNode、selectNodeContents、deleteContents方法
    </div>
    <button id="btn1" onclick="deleteContents(false)">删除内容</button>
    <button id="btn2" onclick="deleteContents(true)">删除元素</button>

    <script>
        function deleteContents (flag) {
            var testRange = document.getElementById('testRange')
            // 创建range对象
            var range = document.createRange()
            if (flag){
                // 获取当前的元素节点
                range.selectNode(testRange)
                //删除range选中的内容
                range.deleteContents()
            } else {
                // 获取当前节点的内容
                range.selectNodeContents(testRange)
                //删除range选中的内容
                range.deleteContents()
            }
        }
    </script>
</body>

  3.Range对象的set相关方法

    方法:

      setStart(node, index) -- 设置Range对象的起点位置

      setEnd(node, index)  -- 设置Range对象的结束位置

      理解:start/end分别表示Range的起点和终点

         Before/After分别表示节点的起点和终点

        setStartBefore -- 将节点的起点位置设置为Range对象的起点位置

        setStartAfter -- 将节点的终点位置设置为Range对象的起点位置

        setEndBefore -- 将节点的起点位置设置为Range对象的终点位置

        setEndAfter -- 将节点的终点位置设置为Range对象的终点位置

    Rnage方法setStart和setEnd示例

<body>
    <div id="testRange" class="range" style="background-color:pink; width: 50%; height: 40px"> 
        测试Range对象的set相关方法
    </div>
    <button id="btn1" onclick="deleteChar()">删除</button>
    <script>
        function deleteChar () {
            var testRange = document.getElementById('testRange')
            var textContent = testRange.firstChild
            // 创建range对象
            var range = document.createRange()
            //设置Range对象的起始位置
            range.setStart(textContent, 1)
            //设置Range对象的结束位置
            range.setEnd(textContent, 4)
            //删除Range对象选中的内容
            range.deleteContents()
        }
    </script>
</body>

  Rnage对象的方法setStartBefore/After和setEndBefore/After示例

<body>
    <table id="myTable" border="1" cellspacing="0" cellpadding="0">
        <tr>
            <td>内容1</td>
            <td>内容2</td>
        </tr>
        <tr>
            <td>内容3</td>
            <td>内容4</td>
        </tr>
    </table>
    <button onclick="deleteRow()">删除第一行</button>
    <script>
        function deleteRow() {
            var table = document.getElementById('myTable')
            if (table.rows.length > 0){
                //获取table中的第一行
                var row = table.rows[0]
                //创建range对象
                var range = document.createRange()
                //设置range的起点
                range.setStartBefore(row)
                //设置range的终点
                range.setEndAfter(row)
                range.deleteContents()
            }
        }
    </script>
</body>

  4.Range对象cloneRange/cloneContents/extractContents的方法

    方法:

      cloneRange() --  克隆Range对象

      cloneContents -- 克隆Range对象选中的内容(contents)

      extractContents --- 剪切Range对象选中的内容。 

    Rnage方法示例

<body>
    <div id="test" style="background-color:pink; width: 50%; height: 28px;">测试Range对象的cloneRange/cloneContents/extractContents方法</div>
    <div id="test1" style="background-color:yellow; width: 50%; height: 28px;"></div>
    <button onclick="cloneRange()">cloneRange</button>
    <button onclick="cloneContents()">cloneContents</button>
    <button onclick="extractContents()">extractContents</button>
    <script>
        // cloneRange()方法的演示
        function cloneRange() {
            var div = document.getElementById('test')
            // 创建range对象
            var range = document.createRange()
            // 获取指定节点的内容
            range.selectNodeContents(div)
            // 克隆对应的Range对象
            var cloneRange = range.cloneRange()
            console.log(cloneRange.toString())
        }

        // cloneContents()方法的演示
        function cloneContents() {
            var div = document.getElementById('test')
            // 创建range对象
            var range = document.createRange()
            // 获取指定节点的内容
            range.selectNodeContents(div)
            // 克隆Range对象中选中节点的内容(此处的内容就是div元素)
            var cloneContents = range.cloneContents()
            div.appendChild(cloneContents)
        }

        // extractContents()方法的演示
        function extractContents() {
            var div = document.getElementById('test')
            var div1 = document.getElementById('test1')
            // 创建range对象
            var range = document.createRange()
            // 获取指定节点的内容
            range.selectNodeContents(div)
            // 克隆对应的节点
            var extractContents = range.extractContents()
            div1.appendChild(extractContents)
        }
    </script>
</body>

  5.Range对象collapse/detach的方法

    方法:

      collapse -- 设置range对象对元素的选择状态

      detach --- 释放range对象(不再需要的时候) 

    Rnage方法示例

<body>
    <div id="div" style="background-color: pink; width: 300px; height: 50px">测试Range的选中取消功能</div>
    <button onclick="select()">选择元素</button>
    <button onclick="unselect()">取消选择</button>
    <button onclick="showContents()">显示选中内容</button>

    <script>
        var range = document.createRange()
        function select () {
            var div = document.getElementById('div')
            range.selectNode(div)
            // 释放掉创建的range对象(不再需要的时候)
            // range.detach()
        }
        function unselect () {
            var div = document.getElementById('div')
            // 取消range选中的内容
            range.collapse(false)
        }
        function showContents () {
            console.log(range.toString())
        }
    </script>
</body>

  6.Range对象insertNode/compareBoundaryPoints的方法

    方法:

      insertNode(node) -- 将参数中的节点移动到range对象的起始位置处 

      compareBoundaryPoints --- 比较两个Range对象的相对位置

    Rnage方法示例

<body>
    <div id="div" style="background-color: pink; width: 300px; height: 50px">测试Range的<b id="boldText">选中</b>取消功能</div>
    <button onclick="insert()" id="btn">insert</button>
    <button onclick="compareBoundary()" id="btn">compare</button>
    <script>
        // 移动元素位置方法
        function insert() {
            var btn = document.getElementById('btn')
            var selection = document.getSelection()
            var range = selection.getRangeAt(0)
            // 将btn按钮重新移动到鼠标选中的地方
            range.insertNode(btn)
        }

        // 判断range起/终点位置方法
        function compareBoundary() {
            var boldText = document.getElementById('boldText')
            var range = document.createRange()
            range.selectNodeContents(boldText.firstChild)
            var selection = document.getSelection()
            var range1 = selection.getRangeAt(0)
            if (range1.compareBoundaryPoints(Range.START_TO_END, range) <= 0) {
                console.log("选取的文字在粗体前面")
            } else if (range1.compareBoundaryPoints(Range.END_TO_START, range) >= 0){
                console.log("选取的文字在粗体后面")
            } 
        }
    </script>
</body>

 

转载于:https://www.cnblogs.com/diweikang/p/8643753.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 Apache POI 来实现将 Word 文件转换为 PDF 格式的文件。Apache POI 是一个 Java 库,可以用来处理 Microsoft Office 文件,并且可以使用它来将 Word 文件转换为 PDF 格式。 ### 回答2: 要使用Java将以Word形式存储的HTML文件转换为PDF,可以使用一些开源的Java库来实现。 首先,需要将HTML文件加载到Java程序中。可以使用Apache POI库来读取Word文档,并将其转换为HTML格式。Apache POI提供了一组API来处理各种文档格式,包括Word文档(.doc和.docx)。 接下来,需要将HTML文件转换为PDF格式。可以使用开源的PDFBox库来实现这个功能。PDFBox是一个功能强大的Java库,可以创建和操作PDF文件。 首先,将HTML文件加载到Java程序中。可以使用POI的HTML Parser模块来读取HTML内容。使用POI的XWPFWordExtractor类从Word文档中提取出文本。然后,使用这些文本创建一个PDF文件。 以下是一个简单的示例代码,演示了如何使用POI和PDFBox库将以Word形式存储的HTML文件转换为PDF: ```java import org.apache.poi.hwpf.HWPFDocument; import org.apache.poi.hwpf.converter.WordToHtmlConverter; import org.apache.poi.hwpf.usermodel.Range; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.extractor.XWPFWordExtractor; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.apache.pdfbox.text.PDFTextStripper; import java.io.*; public class HTMLtoPDFConverter { public static void main(String[] args) { String inputFile = "input.doc"; String outputFile = "output.pdf"; // 转换Word文档为HTML String htmlContent = convertWordToHTML(inputFile); // 将HTML转换为PDF convertHTMLToPDF(htmlContent, outputFile); System.out.println("转换完成!"); } private static String convertWordToHTML(String inputFile) { StringBuilder htmlContent = new StringBuilder(); try { FileInputStream fis = new FileInputStream(inputFile); HWPFDocument wordDoc = new HWPFDocument(fis); WordToHtmlConverter htmlConverter = new WordToHtmlConverter( org.apache.poi.hwpf.HWPFDocumentMapper.getInstance() ); htmlConverter.processDocument(wordDoc); htmlContent.append(htmlConverter.getDocument().getInnerHTML()); fis.close(); } catch (Exception e) { e.printStackTrace(); } return htmlContent.toString(); } private static void convertHTMLToPDF(String htmlContent, String outputFile) { try { // 创建PDF文档对象 PDDocument document = new PDDocument(); // 创建PDF页面 PDPage page = new PDPage(); document.addPage(page); // 创建PDF内容流 PDPageContentStream contentStream = new PDPageContentStream(document, page); // 创建HTML文本剥离器 PDFTextStripper stripper = new PDFTextStripper(); // 设置HTML内容 stripper.setHTMLText(htmlContent); // 提取HTML内容并绘制到PDF页面 stripper.writeText(contentStream); // 关闭内容流 contentStream.close(); // 保存PDF文件 document.save(outputFile); // 关闭PDF文档 document.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 以上代码示例了如何使用Apache POI的HWPF和XWPF模块来读取Word文档,并将其转换为HTML。然后,使用PDFBox库将HTML内容转换为PDF。 ### 回答3: 要使用Java将以Word形式存储的HTML转换为PDF,可以遵循以下步骤: 1. 解析HTML文件:可以使用HTML解析库,如Jsoup,从HTML文件中提取内容和样式。 2. 创建PDF文档:使用Java的PDF库,如iText或Apache PDFBox,创建一个新的PDF文档对象。 3. 根据HTML内容,生成PDF内容:将HTML文件中的元素和样式映射到PDF文档中的对应元素和样式。 4. 添加样式和格式:根据HTML文件中的CSS样式规则,将样式应用到相应的PDF元素上。 5. 添加图片和链接:解析HTML文件中的图片和超链接标签,将其添加到PDF文档对应的位置。 6. 保存PDF文档:将生成的PDF文档保存到指定的文件路径。 以下是一个基本的Java代码示例,演示了如何使用iText库将以Word形式存储的HTML转换为PDF: ```java import com.itextpdf.text.Document; import com.itextpdf.text.PageSize; import com.itextpdf.text.Paragraph; import com.itextpdf.text.pdf.PdfWriter; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.io.FileOutputStream; import java.io.IOException; public class WordToPdfConverter { public static void main(String[] args) { try { // 解析HTML文件 org.jsoup.nodes.Document htmlDoc = Jsoup.parse(new File("input.html"), "UTF-8"); // 创建PDF文档 Document pdfDoc = new Document(PageSize.A4); // 创建PDF写入器 PdfWriter.getInstance(pdfDoc, new FileOutputStream("output.pdf")); // 打开PDF文档 pdfDoc.open(); // 遍历HTML文件中的所有段落元素 Elements paragraphs = htmlDoc.select("p"); for (Element paragraph : paragraphs) { // 创建PDF段落,并添加到PDF文档中 pdfDoc.add(new Paragraph(paragraph.text())); } // 关闭PDF文档 pdfDoc.close(); System.out.println("HTML转换为PDF成功!"); } catch (IOException e) { e.printStackTrace(); } } } ``` 上述示例代码仅演示了基本的转换过程,实际应用中可能需要更复杂的处理逻辑和样式调整。同时,还可根据具体需求使用其他PDF库或添加更多的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值