简体   繁体   English

Javascript:如何获取Dom树中的最后一个字符?

[英]Javascript : How to get last character in Dom tree?

I wanna get the last "visible" character in Dom tree, then split Dom at this level. 我想获取Dom树中的最后一个“可见”字符,然后在此级别拆分Dom。

Sample before split : 分割前样本:

<div class="myclass"><label>mon label</label><span class="spanclass"></span></div>
                                    ^---- last visible character

Sample after split : 分割后的样本:

<div class="myclass"><label>mon labe</label></div>
<div class="myclass"><label>l</label><span class="spanclass"></span></div>

Doe's anyone know how to do it ? 母鹿的人知道怎么做吗?

My code : 我的代码:

function reverseString(str)
{
    return (str === '') ? '' : reverseString(str.substr(1)) + str.charAt(0);
}

var domString = ' <div class="myclass"><label>mon label</label><span class="spanclass"></span></div>'; //'&nbsp;';
var domSpace = domString.replace(/  +/g, ' ');
var revDom = reverseString(domSpace);

var re = /((\>[^\<\/]+\/?\<)+)*(\s+|\;[a-zA-Z#0-9]+\&|(\>\/[a-zA-Z]+\<)+|[^\>])/i;
var found = revDom.match(re);

var str1 = domSpace.substr(0, domSpace.length - found[0].length);
var str2 = domSpace.substr(domSpace.length - found[0].length, found[0].length);

console.log(str1 + ' ------- ' + str2); 

Thanks 谢谢

here is how you can get the last character: 这是获取最后一个字符的方法:

 var p = document.getElementsByClassName("myclass")[0];
 var data = p.children[0].innerHTML
 var lastChar = data[data.length -1];

You can then replace it by doing: 然后,您可以执行以下操作来替换它:

p.children[0].innerHTML = lastChar;

JsFiddle JsFiddle

Here my solution : 这是我的解决方案:

function reverseString(str)
{
    return (str === '') ? '' : reverseString(str.substr(1)) + str.charAt(0);
}

function removeClosed(str)
{
    var tothreat = str;
    re = /<(\w+)[^>]*>[^<]*<\/(\w+)>/gi;
    while (tothreat.match(re))
    {
        var tothreat = tothreat.replace(re, function(str, p1, p2, offset, s) {
            if (p1 === p2) return '';
            return str;
        });
    }
    return tothreat;
}

var domString = '<div class="myclass"><label>mon label</label><span class="spanclass"></span></div>';
var domSpace = domString.replace(/  +/g, ' ');
var revDom = reverseString(domSpace);

var re = /((>[^<\/]+\/?<)+)*(\s+|\;[a-zA-Z#0-9]+\&|(>\/[a-zA-Z]+<)+|[^>])/gi;
var found = revDom.match(re);

var str1 = domSpace.substr(0, domSpace.length - found[0].length);
var str2 = domSpace.substr(domSpace.length - found[0].length, found[0].length);


var str = removeClosed(str1);
str = str.replace(/<\w+\/>/gi, '');
str = str.replace(/>[^<]+</gi, '><');

found = str.match(/(<\w+[^>]*>)+/gi);
var part2 = found[0] + str2;


str = removeClosed(str2);
found = str.match(/(<\/\w+>)*/gi);
var part1 = str1 + found[1];

console.log(part1)
console.log(part2); 

JsFiddle JsFiddle

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM