标签: textrange

获取范围的开始和结束偏移量相对于其父容器

假设我有这个HTML元素:

<div id="parent">
 Hello everyone! <a>This is my home page</a>
 <p>Bye!</p>
</div>
Run Code Online (Sandbox Code Playgroud)

用户用鼠标选择"家".

我希望能够确定#parent他的选择中有多少个字符开始(以及#parent他选择结束时有多少个字符结束).即使他选择了HTML标记,这也应该有效.(我需要它在所有浏览器中工作)

range.startOffset 看起来很有希望,但它只是相对于范围的直接容器的偏移量,并且仅当容器是文本节点时才是字符偏移量.

javascript textrange

66
推荐指数
3
解决办法
6万
查看次数

使用JavaScript突出显示文本范围

我想强调(应用css)某个文本范围,由其开始和结束位置表示.这比看起来更难以实现,因为文本中可能还有其他标记需要忽略.

例:

<div>abcd<em>efg</em>hij</div>
Run Code Online (Sandbox Code Playgroud)

highlight(2, 6)需要突出显示"cdef"不删除标签.

我已经尝试过使用TextRange对象,但没有成功.

提前致谢!

javascript selection textrange

38
推荐指数
1
解决办法
4万
查看次数

Javascript:将插入符号移到最后一个字符

我有一个textarea,当我点击它时,我想将插入符号移动到最后一个字符 Something[caret]

function moveCaret(){
     // Move caret to the last character
}
Run Code Online (Sandbox Code Playgroud)
<textarea onclick="moveCaret();">
     Something
</textarea>
Run Code Online (Sandbox Code Playgroud)

据我所知,TextRange对象在某种程度上是可行的,但我真的不知道如何使用它

编辑:我很想看到纯粹的JavaScript解决方案,所以没有图书馆请.

javascript character caret cpu-word textrange

17
推荐指数
1
解决办法
2万
查看次数

如何将内联内容从一个FlowDocument插入另一个?

我正在构建一个应用程序,它需要允许用户从另一个插入RichTextBox当前插入位置的文本中插入文本.在运行这种技术之前,我花了很多时间搞砸了FlowDocument对象模型 - source并且target都是FlowDocuments:

using (MemoryStream ms = new MemoryStream())
{
    TextRange tr = new TextRange(source.ContentStart, source.ContentEnd);                    
    tr.Save(ms, DataFormats.Xaml);
    ms.Seek(0, SeekOrigin.Begin);
    tr = new TextRange(target.CaretPosition, target.CaretPosition);
    tr.Load(ms, DataFormats.Xaml);
}
Run Code Online (Sandbox Code Playgroud)

这非常有效.

我现在唯一的问题是它总是将源插入一个新的段落.它打破插入符号的当前运行(或其他),插入源,并结束段落.如果源实际上一个段落(或多个段落),那是合适的,但如果它只是(比方说)一行文本不合适.

我认为对此的答案很可能是最终检查目标是否完全由单个块组成,如果是,则TextRange在保存之前将块设置为块内容的开头和结尾到溪边.

整个世界FlowDocument对我来说都是一片黑暗神秘的海洋.如果必须的话,我可以成为它的专家(根据陀思妥耶夫斯基:"人是可以适应任何事物的动物."),但是如果有人已经想出这个并且可以告诉我该怎么做它会让我生活更容易.

c# wpf richtextbox flowdocument textrange

10
推荐指数
1
解决办法
3307
查看次数

Internet Explorer 8标准模式(IE8)中的TextRange offsetLeft和offsetTop中断

当找到文本范围的位置时,我似乎发现了Internet Explorer 8的问题 - 例如当前选择的文本.我还没有找到能在StackOverflow或其他地方找到任何关于此问题的报告.

TextRange.offsetLeft和TextRange.offsetTop报告范围的左上角,在IE8中我看到的所有情况都是粗略正确的,除非范围在IFrame中.当范围在IFrame内时,offsetLeft和offsetTop的值相对于其父级内的IFrame的位置移动负值.(见下面的例子)

此问题仅在以下时间出现:

  • 浏览器是IE8
  • 页面处于标准模式

在以下情况下不会出现此问题:

  • 浏览器是IE7或IE10
  • 页面处于怪异模式

我的问题:

  • 其他人可以证实这个问题还是我疯了?
  • 这是一个已知的问题?
  • 有没有理智的解决方案或解决方案?(一个理智的解决方案是框架中的JS不需要了解其父窗口的任何内容)

谢谢.

问题的一个例子:(参见IE8与IE9的区别)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
        <title>IE8 IFrame Text Range Position Test Page</title>
        <style type="text/css">
            body {
                font-family: Tahoma;
            }
            #target {
                background-color: #CCC;
                position: absolute;
                left: 50px;
                top: 50px;
            }

            #bullsEye {
                position: absolute;
                background-color: red;
                width: 5px;
                height: 5px;
            }

            iframe {
                margin: 10px 75px;
            }
        </style> …
Run Code Online (Sandbox Code Playgroud)

internet-explorer-8 textrange

9
推荐指数
1
解决办法
2382
查看次数

如何从C#更改PowerPoint中TextRange的字体颜色?

我使用C#创建了一个PowerPoint演示文稿:

PowerPoint.Application powerpointApplication;
PowerPoint.Presentation pptPresentation;
PowerPoint.Slide Slide;

// Create an instance of PowerPoint.
powerpointApplication = new PowerPoint.ApplicationClass();

// Create a PowerPoint presentation.
pptPresentation = powerpointApplication.Presentations.Add(
Microsoft.Office.Core.MsoTriState.msoTrue);


// Create empty slide
Slide = pptPresentation.Slides.Add(1, PowerPoint.PpSlideLayout.ppLayoutBlank);

TextRange objTextRng = objSlide.Shapes[1].TextFrame.TextRange;
objTextRng.Text = "Remote sensing calendar 1";
objTextRng.Font.Name = "Comic Sans MS";
objTextRng.Font.Size = 48;
// TODO: change color
// objTextRng.Font.Color 



// Save presentation
pptPresentation.SaveAs( BasePath + "result\\2_example.ppt", 
                       PowerPoint.PpSaveAsFileType.ppSaveAsDefault, 
                       MsoTriState.msoTrue // TODO: ??? ?? ???????????
                      );
pptPresentation.Close();
Run Code Online (Sandbox Code Playgroud)

现在,我该如何更改字体颜色objTextRng

.net c# powerpoint office-interop textrange

6
推荐指数
2
解决办法
1万
查看次数

有没有办法在Chrome和/或IE中使用JS选择多个文本区域?

Firefox 3可以使用JS选择多个文本区域。有没有办法在Chrome和IE中执行此操作?

我确实试图在Chrome和IE9的网页中找到一种选择多个文本区域的方法。


信息位于:http : //help.dottoro.com/ljxsqnoi.php


例如:http//jsfiddle.net/t3sWz/


仅代码FireFox3.5 + ...(但这是问题):

<html>

<head>
    <meta charset="UTF-8">
    <style>
        #trigger { background: yellow }
    </style>
</head>

<body>
    <p id="test">
        This is some text you can highlight by dragging or clicking below.
    </p>
    <span id="trigger">
        Click here to select "This" and "some"
    </span>
    <a> - Firefox only :-(</a>
    <br>
    <br>
    <br>
    <br>
    <br>
    <input type="button" value="Get selection" onmousedown="getSelText()">
    <form name=aform>
        <textarea name="selectedtext" rows="5" cols="20">
        </textarea>
    </form>
    <script>
        var testCase = function() …
Run Code Online (Sandbox Code Playgroud)

javascript firefox range textnode textrange

5
推荐指数
1
解决办法
3168
查看次数

在WPF RichTextBox中将特定文本设置为粗体

我正在扩展WPF Richtextbox的功能。我希望某些文本在键入时变为粗体。我能够使某些文本变为粗体,但粗体字后面的文本也将变为粗体...

这是我的代码示例:

private bool _Running = false;
void CustomRichTextBox_TextChange(object sender, TextChangedEventArgs e)
{
    if(_Running)
        return;
    _Running = true;

    //Logic to see if text detected

    //Logic to get TextPointers

    //Logic to get TextRange
    var boldMe = new TextRange(textPointer1, textPointer2);
    //Bold text
    boldMe.ApplyPropertyValue(TextElement.FontWeightProperty, FontWeights.Bold);

    _Running = false;
}
Run Code Online (Sandbox Code Playgroud)

我想要:

没结结没结

但是我得到的是:

没结没结没结没结

**请注意,键入时它将变为粗体。

如何防止加粗单词后的文本也加粗?


由于提供的链接的可接受解决方案适用于WinForms,其余解决方案适用于预设文本,因此没有重复的问题。

c# wpf richtextbox textrange

5
推荐指数
1
解决办法
1960
查看次数

在插入位置(IE)将文本插入可编辑的IFRAME

我正在努力解决一个实际上很直接的问题:在Internet Explorer中,我想在当前的插入位置插入纯文本.这对于简单的TEXTAREA元素非常有用,但它对于可编辑的IFRAME并不完全有效,这就是我所拥有的.

在我使用的脚本中,我正在从IFRAME的文档创建一个TextRange对象,我用它将文本粘贴到光标位置的HTML.

<iframe id="editable">
  <html>
    <body>
      Some really boring text.
    </body>
  </html>
</iframe>
<script type="text/javascript">

    window.onload = function() {
        var iframe = document.getElementById('editable');
        var doc = iframe.contentDocument || iframe.contentWindow.document;

        doc.body.innerHTML = iframe.textContent || iframe.innerHTML;

        // Make IFRAME editable
        if (doc.body.contentEditable) {
            doc.body.contentEditable = true;
        } 
    }

    function insert(text) {
        var iframe = document.getElementById('editable');
        var doc = iframe.contentDocument || iframe.contentWindow.document;
        iframe.focus();
      if(typeof doc.selection != 'undefined') {
            var range = doc.selection.createRange();
            range.pasteHTML(text);
      }
}
</script>
<input type="button" value="Insert" onClick="insert('foo');"/>
Run Code Online (Sandbox Code Playgroud)

当我在IFRAME中选择一些文本时,选择将替换为"foo" - …

javascript iframe internet-explorer textrange

4
推荐指数
1
解决办法
7806
查看次数

如何知道选择中是否有链接元素

在Javascript中,我想确定一个元素,比如一个A元素,是否存在于给定的范围/ textRange中.目的是确定用户的当前选择是否包含链接.我正在构建一个富文本编辑器控件.

range对象具有commonAncestorContainer(W3C)或parentElement()(Microsoft)方法,该方法返回范围内所有元素的最接近的公共anscestor.但是,在元素内部查找元素是A行不通的,因为这个共同的祖先也可能包含不在范围内的元素,因为范围可以从父节点开始或结束.

你会如何实现这一目标?

javascript dom range selection textrange

4
推荐指数
2
解决办法
2012
查看次数