我有以下代码,我设法通过组合不同的资源。这样做的是它需要内容的html并将其分成两半(对于更多的应用程序)。以下代码是这样的,它不会破坏一个单词(等到单词的结尾)。
var minCharCount = 600;
var divcontent = $('#myDiv').html();
var firstHalf = divcontent.substr(0, minCharCount);
firstHalf = firstHalf.substr(0, Math.min(firstHalf.length, firstHalf.lastIndexOf(" ")));
var secondHalf = divcontent.substr(firstHalf.length, divcontent.length);
但是,最后一个问题是它可能会破坏html标记导致代码错误。有没有办法确保代码在任何潜在的标签结束后将它们分成两部分?
编辑:可能有点难以理解。我想要的是:
long text comes here with tags like <b>bold</b> or even <i>italic</i>.
^1 ^2 ^3
所以我的观点是,如果我们在1
处罚款,但如果我们在2
处突破并将这两部分追加到某处,我们就会遇到问题。所以在打破2
之前,我们需要检查它是否在标签的中间。如果是,则等待标签结束然后中断:即3
。
答案 0 :(得分:0)
而不是
$('#myDiv').html();
对从
返回的字符串运行该函数 $('#myDiv').text();
这样你就不会在输入字符串中得到任何html标签。
更新: (回应评论)
因为你需要html标签,所以你可以循环遍历目标的children(),测量它们的.text()的长度,并将它们添加到输出,直到你达到minChars数量。然后对您到达的最后一个孩子执行相同的操作,直到达到最接近目标字符数的文本量。
children()排除文本节点,因此您必须使用contents()。 但是,这种方法很麻烦。我认为你最好的办法是创建一个范围对象 见这里:https://developer.mozilla.org/en-US/docs/Web/API/Document.createRange