请参阅下面的示例:它显示表格中的文本行(这是一个很好的理由,但这不是问题所在。)
基本上,我需要的是一个函数,当我点击链接时,警告()是文本选择的完美坐标。通过完美的坐标,我的意思是:选择开始的行号,选择结束的行号(这两个是微不足道的,我只是使用<td>
id中的数字,开头的偏移量选择的结束,选择结束的偏移。
所以,如果我选择
第一行,它包含文字
这是第二个
我收到一条提示:
选择从第1行开始,偏移12
选择在第2行结束,偏移18
使用getRange()非常简单(我不需要Internet Explorer兼容性,因此如果文本是纯文本,则可以使用适用于FireFox,Chrome和Safari的getRange())。这里的问题是<span>, <strong> and <em>
标签无处不在,并且每个标签都是一个新的childNode。所以getRange()不起作用。
我还没有找到忽略标记的方法。似乎没有简单的方法可以做到这一点。但我不是Javascript专家,也许有一个技巧可以忽略(或使函数表现得好像忽略了)文本中的标记。
<a href="javacript: magicCode();">Select some text in the table then click here</a>
<table>
<tr>
<td id="content1">This <span class="one">is the</span> first line <span class="two">and it contains</span> text</td>
</tr>
<tr>
<td id="content2">This is the <span class="three">second line and it contains text</span></td>
</tr>
<tr>
<td id="content3"><span class="four">This is <span class="five">the third</span> line and it</span> contains text</td>
</tr>
<tr>
<td id="content4">This is <strong>the fourth <em>line</em> and it</strong> contains text</td>
</tr>
<tr>
<td id="content5">This is the fifth line and it contains text</td>
</tr>
</table>
有人可以帮我写我的magicCode()吗?
谢谢!
答案 0 :(得分:1)
您可以使用.textContent
属性来获取没有HTML的文本值。通过检查.innerText
并使用它(如果存在),您可以轻松地在所有浏览器中使用它,否则使用.textContent
。 innerText
适用于IE,textContent
适用于Firefox / Chrome等。
以下是一个示例:
var content = document.getElementById('content1');
if(content.innerText){
alert(content.innerText);
}else{
alert(content.textContent);
}
答案 1 :(得分:0)
您可能希望使用canvas标记来生成文本;对于您的项目来说,它可能有点复杂和过分。
Bespin是一个完全使用canvas标签创建的代码编辑器。我没有看源,所以我无法告诉你他们如何设法渲染文本和模仿文本选择。