Javascript 删除紧跟在元素前面的字符

Javascript 删除紧跟在元素前面的字符,javascript,jquery,html,regex,Javascript,Jquery,Html,Regex,我有一些从第三方来源捕获的文本内容,其中有时包含表情符号,表示为图像元素。我找到每个表情符号图像元素,并使用以下代码将它们转换为该表情符号的unicode字符: $(this).find('img.emoji').each(function(i){ emoji = decodeURIComponent($(this).data('textvalue')); $(this).replaceWith(emoji); }); 但是,紧靠每个表情符号图像元素前面的文本包含一个额外的空白

我有一些从第三方来源捕获的文本内容,其中有时包含表情符号,表示为图像元素。我找到每个表情符号图像元素,并使用以下代码将它们转换为该表情符号的unicode字符:

$(this).find('img.emoji').each(function(i){
    emoji = decodeURIComponent($(this).data('textvalue'));
    $(this).replaceWith(emoji);
});
但是,紧靠每个表情符号图像元素前面的文本包含一个额外的空白字符,就在表情符号之前。见:

'[...] blah blah blah  <img class="emoji" data-textvalue="%F0%9F%98%92">'
但它应该是:

'[...] blah blah blah <img class="emoji" data-textvalue="%F0%9F%98%92">'
因为这是来自第三方来源,我无法控制原始副本。但是,我想删除每个表情图像实例中多余的空白字符,不管是在将其转换为unicode之前还是之后,这都无关紧要,但我怀疑之前可能更容易做到。我如何做到这一点


我的一个想法是可能使用javascript的str.indexOf获取image元素开头的字符位置,然后删除小于1的字符。但是,这需要将父元素转换为字符串,如果初始文本本身包含短语,则会导致问题。我会在这里跳出jQuery,使用原生Javascript——对于这样的文本,如果有标记,则更好

考虑这一点的最佳方式是浏览器的内部表示是,未标记文本的位实际上在其周围有一个特殊的不可见标记,因此

<div>I like ice-cream! <img src='ice-cream'></img> it's so yummy!</div>

从你给出的例子中,你能给出期望的结果吗?这样我才能清楚地理解please@jammycoder更新以显示更好的示例。我所要做的只是在每个$'img.emoji'元素之前删除一个空格。一个简单的正则表达式可能会起作用-string.replace/[]{2,}删除所有的双空格怎么样先看问题,然后使用函数
<div>
    <textnode>I like ice-cream! </textnode>
    <img src='ice-cream'></img>
    <textnode> it's so yummy!</textnode>
</div>
var childNodes = $(this).get(0).childNodes;
//start at 1 instead of 0 - first node is irrelevant here
for (var i=1; i<childNodes.length; i++) {
    var node = childNode[i];
    if ( isNodeAnImg( node ) ) {
        var previousNode = childNodes[i-1];
        if ( isNodeATextNode() ) {
            stripTrailingSpaceFrom( previousNode );
        }
    }
}

function isNodeAnImg(node) {
    return (node.nodeType == Node.ELEMENT_NODE && node.nodeName == "img");
}

function isNodeATextNode(node) {
    previousNode.nodeType == Node.TEXT_NODE
}

function stripTrailingSpaceFrom( node ) {
    var text = node.textContent;
    var lastCharacter = text.charAt( text.length - 1 );
    if ( lastCharacter === ' ' ) {
        node.textContent = text.substring(0, text.length - 1);
    }
}