我有这个小问题。我需要在段落内的锚标记之前和之后找到前3个字符。
示例:
<p>This is <a href='#' id='lock'>a</a> test for an anchor</p>
我需要得到的结果是:
is te
其中is
(包括末尾的空格)是锚标记中剩下的前3个字符,而te
(再次包括开始时的空格)是锚标记中的3个第一个字符。
JQuery可以提供帮助,到目前为止我尝试使用正则表达式和Jquery但没有运气。
我还应该尝试什么?有什么我可能会失踪? 自从我处理前端问题以来已经有一段时间了。
答案 0 :(得分:1)
使用以下正则表达式捕获锚定标记之前和之后的字符
(.{3})<a href.*?<\/a>(.{3})
如果你想用仅捕获的组替换整个,那么你的正则表达式将是,
.*(.{3})<a href.*?<\/a>(.{3}).*
替换将是,
$1$2
你的代码就是,
> var str = "<p>This is <a href='#' id='lock'>a</a> test for an anchor</p>";
undefined
> var r = str.replace(/.*(.{3})<a href.*?<\/a>(.{3}).*/g, "$1$2");
undefined
> console.log(r);
is te
undefined
答案 1 :(得分:1)
尝试使用.contents()
来抓取文本节点
var pTag = $('p').contents();
console.log(pTag[0].nodeValue.slice(-3) +
pTag[2].nodeValue.substring(0,3)); // "is te"
答案 2 :(得分:1)
像这样的东西
var lock = document.getElementById('lock');
var prev = lock.previousSibling;
var next = lock.nextSibling;
var text = prev.textContent.slice(-3) + next.textContent.slice(0, 3);
答案 3 :(得分:1)
jQuery和DOM遍历的另一个解决方案:
var a = $("a", "<p>This is <a href='#'>a</a> test for an anchor</p>")[0],
left = a.previousSibling.nodeValue.slice(-3),
right = a.nextSibling.nodeValue.slice(0, 3);
console.log(left, right); // "is " " te"