12

我需要从字符串中删除跨度标签。是否可行。?

我的输入是这样的

In open <span class="">court</span> at 11:01 a.m.)
          THE <span class="">COURT</span>:  Our interpreter.
(NOTE:  Spanish interpreter Rosa Lopez-Gaston sworn.)
          SPEAKER 2:  Judy Faviell for the State.  
          SPEAKER 1:  Carey Bhalla for Mr. Garcia, who is present in custody, Your Honor.  
          SPEAKER 2:  Judge, we do have a change of plea, which I will tender to the <span class="">Court</span>.  
          THE <span class="">COURT</span>:

输出是这个

 In open court at 11:01 a.m.)
              THE COURT:  Our interpreter.
    (NOTE:  Spanish interpreter Rosa Lopez-Gaston sworn.)
              SPEAKER 2:  Judy Faviell for the State.  
              SPEAKER 1:  Carey Bhalla for Mr. Garcia, who is present in custody, Your Honor.  
              SPEAKER 2:  Judge, we do have a change of plea, which I will tender to the <span class="">Court</span>.  
              THE COURT:
4

4 回答 4

32

对于您编辑的问题,您可以这样做:

var str = // your string here

str = str.replace(/<\/?span[^>]*>/g,"");

演示:http: //jsfiddle.net/vXXJ6/

于 2013-08-27T11:49:34.143 回答
6

概括

如果您需要转换的“字符串”已经是 HTML 元素内容的一部分,那么这里有一个 POV(plain old vanilla)JavaScript(即非 jQuery)解决方案:

element.outerHTML = element.innerHTML;

例子和解释

因此,例如,如果您想展开/删除文档中的所有跨度,您可以遍历所有相关元素,如下所示:

document.querySelectorAll('span').forEach(spanElmt => {
  spanElmt.outerHTML = spanElmt.innerHTML;
};

下面的示例演示了它是如何工作的,显示指定的元素被删除/展开,而嵌套在其中的任何元素保持不变。

const btn     = document.querySelector('button');
const redSpan = document.querySelector('.red'  );
const par     = document.querySelector('p'     );
const div     = document.querySelector('div'   );

const unwrapElmt = elmt => {
  elmt.outerHTML = elmt.innerHTML; // *** the key line
};

const showParagraphHTML = () => {
  div.textContent = 'HTML for the above line: ' + par.innerHTML;
};

showParagraphHTML();

const unwrapRedSpan = () => {
  unwrapElmt(redSpan);
  showParagraphHTML();
};

btn.addEventListener('click', unwrapRedSpan);
.red {
  color: red;
}
.italic {
  font-style: italic;
}
<button>Click here to unwrap/remove red span</button>
<p>Here is <span class="red">some <span class="italic">very</span> red</span> text.</p>
<p><div></div>

将字符串插入 HTML 元素

此解决方案要求要修改的文本/字符串已经是 HTML 文档或元素的一部分。因此,它不适用于独立字符串,例如:

const myStr = 'some <span><i>very</i> interesting</span> thing';
myStr.outerHTML = myStr.innerHTML; // won't work

最终,这就是最初的问题所要问的。但是,上面的字符串可以成为临时中间孤立 HTML 容器元素的一部分,之后该解决方案变得可用:

const myStr = 'some <span><i>very</i> interesting</span> thing';
const container = document.createElement('div'); // a temporary orphan div
container.innerHTML = myStr;
const spanToUnwrap = container.querySelector('span');
spanToUnwrap.outerHTML = spanToUnwrap.innerHTML;
const myModifiedStr = container.innerHTML;

如果您只想从单个字符串中删除一个或几个简单标签,这可能看起来有点矫枉过正,正如问题中所建议的那样。在这种情况下,基于正则表达式的替换可能就足够了,例如另一个 answer中提出的替换。然而,对于更复杂的事情(例如,只想删除特定类的跨度等),使用临时孤立的 HTML 元素作为中间元素可能非常有用。

请注意,本节中描述的策略最终是一个不同的答案显示如何使用 jQuery。但是,如果您的初始字符串已经是 HTML 元素的一部分,并且您还不需要 jQuery,那么当您真的只需要outerHTML/ swap 时,使用 jQuery 可能会过大。innerHTML

于 2018-07-18T18:48:46.223 回答
2

尝试

var mystring = 'In open <span class="">court</span> at 11:01 a.m.) THE <span class="">COURT</span>:  Our interpreter. (NOTE:  Spanish interpreter Rosa Lopez-Gaston sworn.) SPEAKER 2:  Judy Faviell for the State. SPEAKER 1:  Carey Bhalla for Mr. Garcia, who is present in custody, Your Honor. SPEAKER 2:  Judge, we do have a change of plea, which I will tender to the <span class="">Court</span>.THE <span class="">COURT</span>:';
var after = $('<div />').html(mystring).find('span').contents().unwrap().end().end().html();

演示:小提琴

于 2013-08-27T11:45:08.737 回答
0

这应该这样做

return $(string).text()

如果你不使用 jQuery,你可以这样:

var e = document.createElement('div');
e.innerHTML = string;
return e.textContent ? e.textContent : e.innerText;

您也可以尝试使用DOMParser虽然可能对您尝试做的事情有点过分

于 2013-08-27T12:02:23.733 回答