如何使用javascript在“innerHtml”属性中转义html?

时间:2011-08-15 18:46:05

标签: javascript

我有一个javascript和我的jsp的组合,它正在添加一些文本并转义它。我也有一些javascrpt,允许我在提交后编辑文本。但是,当单击编辑按钮时,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 个答案:

答案 0 :(得分:2)

使用textContent(或IE中的innerText)

com = theRow.cells[2].textContent || theRow.cells[2].innerText

答案 1 :(得分:0)

我有一个旧的Web应用程序,没有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);