如何删除html开头和结尾的?

时间:2018-12-31 07:07:50

标签: javascript jquery html

我有一个 的HTML内容,我想从内容的开头和结尾删除 。无需删除两者之间的内容。

我尝试使用此方法:

el.innerHTML = el.innerHTML.replace(/\ /g, '');

el有一些HTML内容。像这样使用时, 之间的内容也会被删除。

我的HTML内容应如下所示

enter image description here

如何在开始和结束时从HTML内容中删除 

示例:如果HTML内容应为<p>&nbsp;test&nbsp;example&nbsp;</p>的意思,我希望输出为<p>test&nbsp;example</p>

5 个答案:

答案 0 :(得分:1)

您正在寻找jQuery的装饰。

$.trim('  string with spaces at the ends   ');

或者普通的javascript:

'  string with spaces at the ends   '.trim()

答案 1 :(得分:1)

这里,不需要jQuery。这将修剪标准空间并固定 注意:如果有多个空格,则可能需要更改为递归或循环。

编辑:更改了代码以管理基于元素的内容。

let samples = [
  '&nbsp;<p>test&nbsp;</p>&nbsp;',
  ' <p>test</p> ',
  '<p>&nbsp;test&nbsp;&nbsp;</p>',
  '<p class="test">&nbsp;test&nbsp;&nbsp;</p>'
];

/**
* This function is checking to see if the value is wrapped in an HTML Element
* @param str the string you wish to test. 
*/
const isElementBased = (str) => {
  // Test to see if the content is wrapped in an element
  let pattern = /^<[\S\s]+?>.+?<\/[\S\s]+?>$/;
  return str.match(pattern);
}

/**
* This function will remove leading and trailing spaces/token
* @param str the string to be checked and have replacement action
* @param tokenOverride optional ability to override the seach token.
*/
const removeFixedSpaces = (str, tokenOverride) => {  
  let token = (tokenOverride === undefined) ? '&nbsp;' : tokenOverride;
  str = str.trim();
  if (str.startsWith(token)) {
    str = str.substring(token.length);
  }
  if (str.endsWith(token)) {
    str = str.substring(0, str.length - token.length);
  }
  return str;
}

const remove = (str) => {
  let container;
  if(isElementBased(str)) {
    container = document.createElement('div');
    container.innerHTML = str;
    str = container.firstChild.innerHTML;
  }
  
  str = removeFixedSpaces(str);
  
  if(container) {
    container.childNodes[0].innerHTML = str;
    str = container.innerHTML;
  }
  
  return str;  
}

samples.forEach(s => {
  console.log(`Testing: ${s}`);
  console.log(`Result : ${remove(s)}`);
});

答案 2 :(得分:0)

您可以使用诸如split()pop()splice()join()之类的数组操作:

let elText = '&nbsp;<p>test&nbsp;</p>&nbsp;';
elText = elText.split('&nbsp;')
//remove last &nbsp;
elText.pop();
//remove first &nbsp;
elText.splice(0,1);
elText = elText.join('&nbsp;');
console.log(elText);

答案 3 :(得分:0)

使用正则表达式有点像用大锤砸破螺母。 我会做这样简单的事情:

const trim = (text, find) => {
    let beginPos = 0;
    let endPos = text.length;

    while (text.substring(beginPos, beginPos+find.length) == find)
    {
        beginPos += find.length;
    }
    while (text.substring(endPos-find.length, endPos) == find)
    {
        endPos -= find.length;
    }
    return text.substring(beginPos, endPos);
}
// Usage: trim("Your Text", "&bnsp;")

这会从头到尾删除所有您想要的东西...它应该是不言自明的。

答案 4 :(得分:0)

您可以考虑以下正则表达式:

el.innerHTML.trim().replace(/^&nbsp;(.*)&nbsp;$/g, '$1')
  1. trim首先删除所有结尾的空格。
  2. 捕获第一个&nbsp;和最后一个public interface ITemp { int code { get; set; } string name {get; set;} } 之间的所有内容