我能用Rangy找到与XPath相关的选择的开始和结束的值吗
Can I find value of start and end of a selection respect to the XPath with Rangy?
我试图在p中获取一个选择的范围,但例如,如果我选择单词"Otto von Guericke",rangy.toCharacterRange(content)返回的值与我想要的值不同。当我加载文档时,我在p中添加跨度,并在XPath文本中获得按字符数排列的range值。
Andreas Nürnberger通过计算xpath文本中的字符开始:201结束:219。
Otto Von Gutricke start:218 end 235 by range.toCharacterRange(content)。我假设Rangy计算html字符,html会自动从XPath文本中删除一些空格区域。
现在,如果我存储Rangy找到的范围Otto Von Gutricke的值,当我再次加载文档时尝试添加相对跨度时,开始时间超过前一个跨度,结束时间超过前2个字符。我认为这是因为加载时的位置对XPath文本是真实的。
HTML
<p class="blue">
<span id="form1_table3_tr1_td1_table5_tr1_td1_table1_tr1_td2_p2" class="hasAuthor">Joeran Beel</span>
and
<span id="form1_table3_tr1_td1_table5_tr1_td1_table1_tr1_td2_p2" class="hasAuthor">Stefan Langer</span>
<br>
Docear, Magdeburg, Germany
<br>
{beel, langer}@docear.org
<br>
<br>
<span id="form1_table3_tr1_td1_table5_tr1_td1_table1_tr1_td2_p2" class="hasAuthor">Bela Gipp</span>
<br>
University of California Berkeley, USA & National Institute of Informatics, Tokyo, Japan
<br>
gipp@nii.ac.jp
<br>
<br>
<span id="form1_table3_tr1_td1_table5_tr1_td1_table1_tr1_td2_p2" class="hasAuthor">Andreas Nürnberger</span>
<br>
Otto-von-Guericke University, Magdeburg, Germany
<br>
andreas.nuernberger@ovgu.de
<br>
<br>
<span id="form1_table3_tr1_td1_table5_tr1_td1_table1_tr1_td2_p2" class="hasDOI">doi:10.1045/november14-beel</span>
</p>
Javascript
var parentNode = selection.anchorNode.parentNode;
var range = selection.getRangeAt(0);
var rangeOffsets = range.toCharacterRange(parentNode);
对于XPath文本而不是html,我可以使用Rangy获得range的值吗?
现在我通过创建这个函数解决了这个问题,它计算更改了多少字符。
/**
* getDifferenceOfNumberOfChars return number of chars of difference
* @param {[int]} start start by rangy
* @param {[HTML Object]} node node
* @param {[string]} text text of selection
* @return {[int]} number of chars of difference
*/
function getDifferenceOfNumberOfChars(start, node, text) {
var difference = 0;
var stringOfTextNode;
var endOfSelection = start + text.length;
var substringOfText = node.textContent.substring(start, endOfSelection);
while ((substringOfText.indexOf(text) == -1) && (substringOfText.indexOf(text) != 0)) {
difference++;
start++;
endOfSelection++;
substringOfText = node.textContent.substring(start, endOfSelection);
}
return difference;
}
相关文章:
- 从第一个日期选择器定义第二个日期选择器的开始日期
- D3选择html——传递函数时,索引从1开始,而不是从0开始
- 在选择开始日期后设置结束日期
- 使 URL 开始选择下拉列表
- 基础日期选择器、结束日期(和时间)不能早于开始日期(和时间)
- 结束日期作为基础日期时间选择器中的选定开始日期
- 剑道日期选择器选择日期应从年开始
- 使用JQuery的图像滑块不显示我选择的下一个图像,而是从头开始显示
- 角度引导日期选择器开始日期函数
- 如何从开始日期中的单独字段添加天数/周,以在日期选择器中获取结束日期
- 通过选择从开始日期算起的周数或月数来自动结束日期
- 如何获得 Div 选择开始和选择结束 Firefox 和 GHROOM
- 具有自定义开始日期的日期选择器
- jQuery 从上开始按类名选择 DIV
- 我如何采用两个日期选择器并使用我的开始和结束日期对数据进行排序,但 json 数据包含 5/12/2016,而角度仅排序
- 在文本框中显示结束日期,用户选择的开始日期 + 使用 JavaScript 的 1 年
- 在引导程序的日期选择器上设置“开始日期”
- 如何检测UIWebView何时开始选择文本
- 折叠选择以开始选择,而不是分割
- 按钮,根据字符串开始选择复选框- Javascript