0

如何在 jQuery 中获取元素之前的第一个直接字符?在这种情况下,这将返回d以获取之前的第一个直接字符.cursor

<span class="input">pwd<span class="cursor">&nbsp;</span></span>
4

4 回答 4

1

由于 jQuery 忽略常规文本节点,因此您需要使用一些 DOM 来执行您正在执行的操作。我会做这样的事情:

var sibling = $('.cursor')[0].previousSibling.nodeValue;
console.log(sibling.charAt(sibling.length - 1));
于 2012-12-29T01:15:12.540 回答
1

使用 jQuery 内容()

var text=$('.input').contents().filter(function(){
        return this.nodeType==3 && $(this).next('.cursor').length
    }).text() || ' ';
var lastLetter=text.substr(-1);
于 2012-12-29T01:20:50.950 回答
0
var txt = (((($('.cursor')[0] || {}).previousSibling || {}).nodeValue || "").match(/.$/) || [""])[0];

人类可读:选择“.cursor”并获取第一个匹配元素(实际节点,而不是 jQuery 对象)。获取该节点的前一个兄弟节点,它应该是一个文本节点,并获取它的节点值(文本内容)。在不一定知道字符串长度的情况下抓取最后一个字符,并返回匹配的字符串。每一步,都有一个多余的|| {}|| ""|| [""]确保下一个步骤得到预期类型的​​东西,而不是null.

于 2012-12-29T01:03:52.160 回答
0

我能想到的几件事可能与您想要做的事情很接近,首先请注意,您的目标元素在哪里以及前一个角色在哪里很重要。首先,最简单的方法就是在 .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 );
于 2012-12-29T01:15:27.603 回答