为了账号安全,请及时绑定邮箱和手机立即绑定

无论 DOM 结构如何,在给定文本选择的情况下查找特定类的前一个元素

无论 DOM 结构如何,在给定文本选择的情况下查找特定类的前一个元素

函数式编程 2023-06-29 15:39:27
如附图所示,我的目标是选择一个文本,例如“Among the Helvetii”,并找到 nMarker 类中的哪个元素在选择之前。换句话说,我想选择“Among the Helvetii”并以某种方式找到 nMarker 类的元素,该元素的数据标记等于 1。不幸的是,我没有一次机会使用 jQuery prevAll、prev、closest 等,因为 DOM 是未知的,所以我无法计算父母、祖先等,因为标记放置在许多单词之后,紧随算法(这是我无法更改的要求)。到目前为止,我所取得的成就是实现了这个方案,如果选择与标记所在的元素位于同一元素中,则该方案有效。但正如我所说,我想要一个在不了解 DOM 结构的情况下工作的解决方案。var sel = window.getSelection ? window.getSelection() : document.selection.createRange();if(sel.getRangeAt){ // That’s for Firefox    var range = sel.getRangeAt(0);    var newNode = document.createElement("span");    newNode.setAttribute('class', 'justSelected');    range.surroundContents(newNode);    $(".justSelected").prevAll(".nMarker").data( "marker")}
查看完整描述

1 回答

?
米脂

TA贡献1836条经验 获得超3个赞

使用非 jQuery 方法,我像这样管理它:


var body = $("body").text();

var toFind = window.getSelection().toString();

var strRegEx = '{:(?:(?!{:).)*?'+toFind; 

var res = body.match(strRegEx);

console.log(res);

var regExp = /\{:([^)]+)\:}/;

var matches = regExp.exec(res[0]);

alert(matches[1]);

无论如何,这并不能完全回答问题(我想获得数据标记属性),但现在我得到了相同的数字。然而,只有当选择在整个文本中是唯一的时,这才有效。


查看完整回答
反对 回复 2023-06-29
  • 1 回答
  • 0 关注
  • 110 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信