如下面的代码片段所示,我有多个div文本,其中有一个粗体部分,然后是换行符然后是一段文本。我可以找到()粗体部分,但是如何在javascript / jquery的粗体部分之后只获得跟随换行符的文本部分?
<div class="thecontent">
any amount of text or html elements before
<b>
the bolded text
</b>
<br>
the text I need together with the bolded text which can contain other html
elements apart from line breaks and bolded blocks
<br>
<b>
posibility of more bolded and text couples further in the div
</b>
<br>
and some more text to go with the bolded text
</div>
在一个div中可以有多个粗体部分和文本对,并且所需的文本片段以换行符结束,另一个粗体部分或div的末尾。文本块中可能还有其他html元素,如<a href>
。
我可以使用<b> </b>
获取.find('b')
的内容,并且我尝试使用nodeType == 3
来选择文本节点但只能获取所有文本。
不幸的是我无法更改页面的html。有没有人有解决方案?在此先感谢:)
根据要求,输入将以粗体阻止换行符和后面的文本。我需要跟随它们的文本,直到换行符或其他粗体部分。
输出将是一个变量中的粗体文本和换行后的文本,但直到下一个换行符或另一个变量中的粗体元素。
因此html示例的输出为:the bolded text
+ the text I need together with the bolded text which can contain other html
elements apart from line breaks and bolded blocks
和posibility of more bolded and text couples further in the div
+ and some more text to go with the bolded text
答案 0 :(得分:3)
我认为没有一种非常简单的方法来获取所有节点并将它们分开等等,但这肯定是可能的。由于我不知道您打算如何处理文本,因此我制作了一个整洁的小对象,其中包含了更易于使用的所有内容,或者您可以更改代码以满足您的需求:
var elem = $('.thecontent').get(0).childNodes,
content = {},
i = 0;
for (key in elem) {
var type = elem[key].tagName ? elem[key].tagName : 'text';
content[i] = {};
content[i][type] = elem[key].tagName == 'B' ? $(elem[key]).text() : elem[key].nodeValue;
i++;
}
console.log( content );
返回:
{"0": {"text" : "any amount of text or html elements before"},
"1": {"B" : "the bolded text"},
"2": {"text" : "\n"}, //also returns newlines
"3": {"BR" : null},
"4": {"text" : "the text I need together with the bolded text which can contain other html elements apart from line breaks and bolded blocks"},
"5": {"BR" : null},
"6": {"text" : "\n"},
"7": {"B" : " posibility of more bolded and text couples further in the div"},
"8": {"text" : "\n"},
"9": {"BR" : null},
"10":{"text" : "and some more text to go with the bolded text"},
}
您可以根据行号(从零开始),标记名,文本内容或您需要的任何其他内容对此进行过滤?