我正在创建一个新的答案而不是评论,因为这是我自己的问题的可能答案,我在玩了一会儿之后才创建了这个问题。(正如我之前提到的,我之前的尝试没有涉及 jQuery,并且也有太多问题。)不过,我希望得到反馈,因为它可能会针对特定情况进行一些调整。我使用 HTML 字符串而不是 jQuery 对象作为输入,因为我需要先去除<b>
标签的 HTML,而且我发现它更容易使用,.replace
而不是遍历每个节点来执行此操作。我可能会尽快解决这个问题。
到目前为止,以下代码运行良好。如果它在标签内,它甚至会找到第一个句点,例如a <b>test.</b>
,并相应地删除后续节点。但是,如果是a <b>test. Blah</b>
这样,它将保留,Blah
因为下面的代码当前没有深入挖掘以正确删除.
位于另一个节点内的文本。
HTML:
<div id="text">This <i>is</i> a <b>test</b>. Do <i>not</i> be <b>alarmed</b>.</div>
JavaScript:
$('#text').replaceWith(firstSentenceOnly($('#text').html().replace(/<(b|strong)>(.*?)<\/(b|strong)>/gi, '$2')));
function firstSentenceOnly(node)
{
// Convert to jQuery object
if (typeof(node) == 'string')
node = $('<div>' + node + '</div>');
var periodFound = false;
node.contents().each(function()
{
if (periodFound == true)
{
$(this).remove();
}
else if ($(this).text().indexOf('.') != -1)
{
periodFound = true;
if ($(this)[0].nodeValue && $(this)[0].nodeValue.indexOf('.') != -1)
{
$(this)[0].nodeValue = $(this)[0].nodeValue.substring(0, $(this)[0].nodeValue.indexOf('.') + 1);
}
}
});
return node;
}