使用纯JavaScript替换HTML中的字符串的安全方法

时间:2017-01-07 02:33:19

标签: javascript html replace

假设有一个:

  • 元素对象element
  • 正则表达式或简单字符串pattern
  • 一个字符串replacement(这可以是一个简单的字符串或一个带有替换标记的字符串)。

在JavaScript中,如果不调用jQuery或JavaScript库,如何在pattern的子文本节点中安全地替换所有replacement elementreplacement?如果element.innerHTML = element.innerHTML.replace(pattern, replacement)还包含标记而不是如果包含小于号或大于号的符号将被转义的文本,如何实现此目的?使用replacement的问题在于它可能会破坏标记。因此,使用它来替换超链接的显示文本可能会更改超链接指向的地址。

答案可以包含两个解决方案:一个用文本替换文本(即&#34;&lt;&#34; &lt;将被视为<br/>)和一个用文字字符串替换文本(即replacement中的<br/>将被视为&lt;br/&gt;而不是<)。或者,答案可能只包含一个解决方案,与第一个选项中的第二个解决方案一样,分别将><视为>#include <iostream> #include <vector> #include <cmath> using namespace std; int getMaxPath(vector<vector<int> > Grid, int r, int c, vector<int> &path) { if((r > Grid.size()-1) || (c > Grid[0].size()-1)) return 0; if(r==Grid.size()-1 && c==Grid[0].size()-1){ return Grid[r][c]; } int rs = getMaxPath(Grid, r, c+1, path); int ds = getMaxPath(Grid, r+1, c, path); return max(rs,ds)+Grid[r][c]; } int maxPath(vector<vector<int> > Grid, vector<int> &path) { return getMaxPath(Grid, 0, 0, path); } int main() { vector<vector<int> > mat{{5,0,8,12}, {11,16,9,13},{10,2,15,300},{3,14,18,19}}; vector<int>path; path.push_back(mat[0][0]); int result = maxPath(mat, path); cout << result << endl; for(auto i : path) cout << i << " " << endl; return 0; }

1 个答案:

答案 0 :(得分:0)

我会首先更改所有<>,然后您可以检查br。您需要在表达式的末尾使用g标志使它们变得贪婪。我也在那里放置了可选空格和正斜杠选项。玩得开心......并尝试使您的JavaScript XHTML友好,以便它可以移动。

&#13;
&#13;
// external.js
var pre = onload, doc, bod, htm, E, stripMost; // keeping vars above the onload allows for use on other pages - change pre to different var name if using technique on another page
onload = function(){
if(pre)pre(); // execute previous onload if exists
  
doc = document; bod = doc.body; htm = doc.documentElement;
E = function(id){
  return doc.getElementById(id);
}
stripMost = function(inputString){
  return inputString.replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/&lt;\s*br\s*\/?s*&gt;/g, '<br />');
}
var so = E('so'); // works like document.getElementById('so')
so.onclick = function(){
  E('out').innerHTML = stripMost(E('in').value);
}

}
&#13;
/* external.css */
#in{
  width:200px; height:25px; border:1px solid #000;
}
#so{
  height:25px;
}
&#13;
<!DOCTYPE html>
<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'>
  <head>
    <meta http-equiv='content-type' content='text/html;charset=utf-8' />
    <link type='text/css' rel='stylesheet' href='external.css' />
    <script type='text/javascript' src='external.js'></script>
  </head>
<body>
  <input type='text' id='in' /> <input type='button' id='so' value='show output' />
  <div id='out'></div>
</body>
</html>
&#13;
&#13;
&#13;