替换html字符串中的标签

时间:2018-01-24 09:09:05

标签: javascript php

我有一个配置文件,我可以将replaceTag属性设置为

replacetags = "h1=p|strong,h2=p|strong

表示在html字符串中,所有h1的出现都将替换为

<p><strong>...</strong></p>

同样适用于h2

我正在做类似

的事情
tagpairs = replacetags.split(",") 
for( var i = 0; i < tagpairs.length; i++ ) {
  var pair = tagpairs[i].split("=");
  var searchtag = pair [0];
  var replacetags = pair [1];
  var opensearchstr = "<" + inputTag + ">" />
  var closesearchstr = "</" + inputTag + ">" />
  var openreplacestr = "";
  var closereplacestr = "";
  for( var j = 0; j < replacetags.length; j++) {
    openreplacestr += "<" + replacetags[ idx ] + ">" />
    closereplacestr +=  "</" + replacetags[ len -idx - 1 ] + ">" />
  }
}
像这样的事情。绝对应该有更好的方法。

2 个答案:

答案 0 :(得分:2)

您的逻辑有一些限制

  • 如果要生成的级别超过2个,则无效。
  • 没有替换标签

您需要使用replaceChild

function createElements( ele, val )
{
   var element = document.createElement("div");
   val.split("|").reduce( function(a,c,i,arr){
      var tmpChild = document.createElement(c);
      a.appendChild( tmpChild ); 
      if ( i == arr.length - 1 )
      {
         tmpChild.innerText = ele.innerText;
      }
      return tmpChild;
   } , element);
   ele.parentNode.replaceChild( element.firstChild, ele );
}

<强>演示

replaceTags( "h1=p|strong,h2=p|strong" );
function replaceTags( tags )
{
   //convert to map
   var map = tags.split( "," ).reduce( (a,c) => ( d = c.split("="), a[d[0]] = d[1], a ), {});
   
    
   Object.keys( map ).forEach( function( tagName ){
      Array.from( document.querySelectorAll( tagName ) ).forEach( function( ele ){
          createElements(ele, map[ tagName ] );
      })
   });
}

function createElements( ele, val )
{
   var element = document.createElement("div");
   val.split("|").reduce( function(a,c,i,arr){
      var tmpChild = document.createElement(c);
      a.appendChild( tmpChild ); 
      if ( i == arr.length - 1 )
      {
         tmpChild.innerText = ele.innerText;
      }
      return tmpChild;
   } , element);
   ele.parentNode.replaceChild( element.firstChild, ele );
}
<h1>H1 tag</h1>

<h2>H2 tag</h2>

注意

答案 1 :(得分:0)

使用 private void BindClients(String Search) { DBContext dbcontext = new DBContext(); SqlParameter[] Param = { new SqlParameter("@Search", Search), }; DataSet ds = dbcontext.GetDataset("Proc_getCompanies ", Param); if (ds != null && ds.Tables.Count > 0) { if (ds.Tables[0].Rows.Count > 0) { grdClients.DataSource = ds.Tables[0]; grdClients.Columns["CompanyID"].ToString().Visible = false; } else grdClients.DataSource = null; } else grdClients.DataSource = null; } 函数可以轻松替换使用JQuery。 试试这个:

replaceWith()