如何在 jQuery 中获取元素之前的第一个直接字符?在这种情况下,这将返回d
以获取之前的第一个直接字符.cursor
:
<span class="input">pwd<span class="cursor"> </span></span>
如何在 jQuery 中获取元素之前的第一个直接字符?在这种情况下,这将返回d
以获取之前的第一个直接字符.cursor
:
<span class="input">pwd<span class="cursor"> </span></span>
由于 jQuery 忽略常规文本节点,因此您需要使用一些 DOM 来执行您正在执行的操作。我会做这样的事情:
var sibling = $('.cursor')[0].previousSibling.nodeValue;
console.log(sibling.charAt(sibling.length - 1));
使用 jQuery 内容()
var text=$('.input').contents().filter(function(){
return this.nodeType==3 && $(this).next('.cursor').length
}).text() || ' ';
var lastLetter=text.substr(-1);
var txt = (((($('.cursor')[0] || {}).previousSibling || {}).nodeValue || "").match(/.$/) || [""])[0];
人类可读:选择“.cursor”并获取第一个匹配元素(实际节点,而不是 jQuery 对象)。获取该节点的前一个兄弟节点,它应该是一个文本节点,并获取它的节点值(文本内容)。在不一定知道字符串长度的情况下抓取最后一个字符,并返回匹配的字符串。每一步,都有一个多余的|| {}
,|| ""
或|| [""]
确保下一个步骤得到预期类型的东西,而不是null
.
我能想到的几件事可能与您想要做的事情很接近,首先请注意,您的目标元素在哪里以及前一个角色在哪里很重要。首先,最简单的方法就是在 .parent().html() 上使用正则表达式来获取元素开始之前的字符。
var content = $(".cursor").parent().html();
var lastChar = content.replace(/.*?(.?)<.*?class="cursor".*?/g, '$1');
当然,您可能需要稍微调整正则表达式以适应您的工作,但这应该可以帮助您入门。如果您想从目标(例如 pwd )中获取前一个元素的最后一个字符,您可以在 .prev().html() 上使用 substr。
var content = $(".cursor").prev().html();
var lastChar = content.substr( content.length-2, 1 );