使用Jsoup保留textarea换行符问题求助
Jsoup解析textarea保留换行符的解决方案
Jsoup的val()方法会自动归一化空白字符,导致textarea内的换行符被合并成空格。要保留原始换行,需直接获取内部文本节点的完整内容,而非使用val()。
修改后的代码示例:
private void printTextbox(String htmlStr){ final Document doc = Jsoup.parse(htmlStr, "UTF-8"); Element textbox = doc.select("#textbox").first(); if (textbox != null) { // 获取第一个子文本节点的原始内容(包含换行) TextNode textNode = (TextNode) textbox.childNode(0); System.out.println(textNode.wholeText()); } }
更稳妥的多文本节点处理:
如果textarea内存在多个文本节点(比如嵌套了其他节点的情况),可以遍历所有子节点拼接内容:
private void printTextbox(String htmlStr){ final Document doc = Jsoup.parse(htmlStr, "UTF-8"); Element textbox = doc.select("#textbox").first(); if (textbox != null) { StringBuilder content = new StringBuilder(); for (Node node : textbox.childNodes()) { if (node instanceof TextNode) { content.append(((TextNode) node).wholeText()); } } System.out.println(content.toString()); } }
原理说明:
val()方法模拟表单元素的value属性行为,会将连续空白(包括换行、制表符)替换为单个空格。wholeText()方法返回文本节点的原始未处理内容,完整保留所有换行、空格等格式字符。
内容的提问来源于stack exchange,提问作者nick_j_white
相关产品推荐
相关产品推荐

