如何使用JavaScript在“innerHtml”属性中转义HTML?

3

我有一个同时使用javascript和jsp的组合,用来添加一些文本并进行转义。我还有一些javascript可以在提交后编辑文本。然而,当我点击编辑按钮时,会呈现HTML。

    function editCommentToggle( id )
{
    theRow = document.getElementById("id"+id);
    //user = theRow.cells[0].innerHTML;
    //date = theRow.cells[1].innerHTML;
 -->   com = theRow.cells[2].innerHTML;


    idx = 2;
    maxlength = 250;

                // Comment field
        cell = theRow.cells[idx];
        while( cell.childNodes.length > 0 ) cell.removeChild(cell.childNodes[0]);
        element = document.createElement("textarea");
        element.id="comments-"+id;
        element.rows="3";
        element.value = com;
        element.style.width = "400px";
        element.maxLength = "250";
        element.onfocus = element.onkeydown = element.onkeyup = function(){return characterCounterEdit(undefined, maxlength, this);}; 
        cell.appendChild(element);

"theRow.cells[2].innerHTML;" 获取该单元格中的文本或HTML,但如果有换行符,则会显示<br> ……我该如何构建结构以保留转义后的HTML?谢谢。"
2个回答

3
使用 textContent(或 IE 中的 innerText)
com = theRow.cells[2].textContent || theRow.cells[2].innerText

谢谢朋友...让我试试看。 - Doc Holiday

0

我有一个旧的网络应用程序,没有jQuery或其他花哨的库可用。我尝试了if-then-else的textContent/innerText修复方法,但由于某种原因对动态创建的DIV元素无效。所以不得不实施这个替代修复方法。在Firefox、IE8、IE9和Opera上进行了测试。

// XMLEscape reserverd characters
function XMLEscape(sValue, bUseApos) {
  var sval="";
  for(var idx=0; idx < sValue.length; idx++) {
    var c = sValue.charAt(idx);
    if      (c == '<') sval += "&lt;";
    else if (c == '>') sval += "&gt;";
    else if (c == '&') sval += "&amp;";
    else if (c == '"') sval += "&quot;";
    else if (c == '\'') sval += (bUseApos ? "&apos;" : "&#39;");
    else sval += c;
  }
  return sval;
}

var sprite = document.createElement("DIV");
sprite.setAttribute("class", "sprite_red");
sprite.setAttribute("style", "top:" + nextOffsetTop +"px");
sprite.innerHTML = XMLEscape(items[idx]);
scene.append(sprite);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接