在元素之外抓取第一个字符

时间:2012-12-29 01:00:04

标签: javascript jquery

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

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

4 个答案:

答案 0 :(得分:1)

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

var sibling = $('.cursor')[0].previousSibling.nodeValue;
console.log(sibling.charAt(sibling.length - 1));

答案 1 :(得分:1)

使用jQuery内容()

var text=$('.input').contents().filter(function(){
        return this.nodeType==3 && $(this).next('.cursor').length
    }).text() || ' ';
var lastLetter=text.substr(-1);

答案 2 :(得分:0)

var txt = (((($('.cursor')[0] || {}).previousSibling || {}).nodeValue || "").match(/.$/) || [""])[0];

Human-readable:选择“.cursor”并获取第一个匹配元素(实际节点,而不是jQuery对象)。获取该节点的上一个兄弟节点,该兄弟节点应该是文本节点,并获取其节点值(文本内容)。抓取最后一个字符,而不必知道字符串的长度,并返回匹配的字符串。每一步都有一个冗余的|| {}|| ""|| [""],以确保以下步骤获得预期类型而不是null

答案 3 :(得分: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 );