【问题标题】:I need to get rid of the parentheses around a number inside of a <span>我需要去掉 <span> 内数字周围的括号
【发布时间】:2018-08-03 13:47:33
【问题描述】:

我找到了一种使用 jQuery 的方法,但我需要纯 javascript,我可以放入 &lt;script&gt; 标签。

<span class="slicethis">(10)</span>

$('span.slicethis').text(function (_,txt) {
    return txt.slice(1, -1);});

jQuery jsfiddle 是:http://jsfiddle.net/d72ML/1062/

谁能帮帮我?

【问题讨论】:

标签: javascript slice parentheses


【解决方案1】:

只需将jquery 替换为querySelector 并设置textContent 而不是text

var el = document.querySelector('span.slicethis');
el.textContent = el.textContent.slice(1, -1);

演示

var el = document.querySelector('span.slicethis');
el.textContent = el.textContent.slice(1, -1);
&lt;span class='slicethis'&gt;(10)&lt;/span&gt;

编辑

$('span.slicethis') 遍历所有匹配这个选择器的项目,所以如果有多个这样的元素,那么你需要使用querySelectorAll来遍历它们

[ ...document.querySelectorAll('span.slicethis') ].forEach( function(el){
    el.textContent = el.textContent.slice(1, -1);  
});

[ ...document.querySelectorAll('span.slicethis') ].forEach( function(el){
    el.textContent = el.textContent.slice(1, -1);  
});
<span class='slicethis'>(1)</span>
<span class='slicethis'>(10)</span>
<span class='slicethis'>(100)</span>

【讨论】:

  • @mplungjan 你是对的。我已经更新了答案。
  • 如果您要展示这样的解决方案,请解释您的答案是做什么的,以及它是如何工作的。至少解释一下...(spread)运算符的作用,以及您使用它的原因。
【解决方案2】:

要删除括号,您可以使用一些正则表达式替换它 replace(/\)|\(/g, "") 以便删除多个括号而不是 .slice 并使用 innerHTML 设置/获取 html 内容

var el = document.getElementsByClassName("slicethis")[0];
el.innerHTML = el.innerHTML.replace(/\)|\(/g, "");
&lt;span class="slicethis"&gt;(10)&lt;/span&gt;

【讨论】:

  • querySelectorAll 更兼容,您可能需要循环以获取所有涉及的跨度
  • @mplungjan 同意了。但这取决于 OP 的用例。我只是强调了这样做的方法。
【解决方案3】:

这太过分了。简单的字符串操作不需要 JQuery。 String.substr(start, numChars) 方法可以解决问题。

console.log(document.querySelector(".slicethis").textContent.substr(1,2));
&lt;span class="slicethis"&gt;(10)&lt;/span&gt;

【讨论】:

  • 不是反对者,但如果你要发布一个 jQuery 替代方案(显然,这正是 OP 想要的),请记住你所拥有的 jQuery 方法的一些特性'不复制;这是document.querySelector()document.querySelectorAll() 之间的区别。
  • 更不用说这个数字是小于还是大于2位了
  • @DavidThomas 我知道其中的区别,但 OP 并没有说明他有多个要处理的元素。事实上,他的说法正好相反,这就是为什么显示.querySelector()
  • jsfiddle.net/mplungjan/u13ym3op 处理具有不同内容的多个跨度
猜你喜欢
  • 2019-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
  • 2020-12-13
  • 2022-11-28
  • 2013-04-07
  • 1970-01-01
相关资源
最近更新 更多