In this example, we will try to find JavaScript data which containing backgroundColor:'#FFF'
. Then, we will change value of backgroundColor '#FFF'
⇨ '#ddd'
. This code uses getWholeData()
and setWholeData()
methods to manipulate JavaScript data. Alternatively, html()
method can be used to get data of JavaScript.
// create HTML with JavaScript data
StringBuilder html = new StringBuilder();
html.append("<!DOCTYPE html> <html> <head> <title>Hello Jsoup!</title>");
html.append("<script>");
html.append("StackExchange.docs.comments.init({");
html.append("highlightColor: '#F4A83D',");
html.append("backgroundColor:'#FFF',");
html.append("});");
html.append("</script>");
html.append("<script>");
html.append("document.write(<style type='text/css'>div,iframe { top: 0; position:absolute; }</style>');");
html.append("</script>\n");
html.append("</head><body></body> </html>");
// parse as HTML document
Document doc = Jsoup.parse(html.toString());
String defaultBackground = "backgroundColor:'#FFF'";
// get <script>
for (Element scripts : doc.getElementsByTag("script")) {
// get data from <script>
for (DataNode dataNode : scripts.dataNodes()) {
// find data which contains backgroundColor:'#FFF'
if (dataNode.getWholeData().contains(defaultBackground)) {
// replace '#FFF' -> '#ddd'
String newData = dataNode.getWholeData().replaceAll(defaultBackground, "backgroundColor:'#ddd'");
// set new data contents
dataNode.setWholeData(newData);
}
}
}
System.out.println(doc.toString());
Output
<script>StackExchange.docs.comments.init({highlightColor: '#F4A83D',backgroundColor:'#ddd',});</script>