如何为javascript删除字符串

Posted

技术标签:

【中文标题】如何为javascript删除字符串【英文标题】:How to do strike through string for javascript 【发布时间】:2013-08-19 13:36:32 【问题描述】:

我想删除 javascript 中的文本,但我似乎无法让代码正常工作。

var message = document.getElementById('helloWorld');
setTextContent(message, 'hello world!'.strike());

不胜感激。也想在不使用css的情况下做到这一点。

还应该提到,这些代码行位于另一个名为 totalPackage() 的函数中,该函数在用户单击按钮时运行。我希望在调用其他函数时显示我的消息 hello world!

【问题讨论】:

你能告诉我们setTextContent吗?您最有可能设置innerText 而不是innerhtml 看我的回答。它为您提供了一个工作示例......并且不使用任何 CSS。 【参考方案1】:

使用 Unicode Character 'COMBINING LONG STROKE OVERLAY' (U+0336)

E̶x̶a̶m̶p̶l̶e̶

function strikeThrough(text) 
  return text
    .split('')
    .map(char => char + '\u0336')
    .join('')
<input oninput="document.querySelector('#output').innerText = strikeThrough(this.value)" placeholder="type here"><p id="output"></p>

要撤消它,只需从字符串中删除所有 \u0336 字符。

string.replace(/[\u0336]/g, '')

【讨论】:

简单而迷人 我希望您也能提及如何撤消它? :) @KickButtowski 将.map(...) 行替换为.filter(char => char !== '\u0336')。基本上从字符串中找到并删除所有\u0336 字符。 您应该将此添加到您的帖子恕我直言。 ?? @KickButtowski 嗯,我不知道转义的 Unicode 字符可以在这样的正则表达式中工作。直到。是的,我想如果它有效,它会更简洁!用你的方法更新了答案。【参考方案2】:

试试这个

var message = document.getElementById('helloWorld');
message.innerHTML='<del>helloworld</del>'

【讨论】:

【参考方案3】:

strike() 的正确语法是str.strike()

所以像这样使用

 setTextContent(message, 'hello world!'.strike());

【讨论】:

这正是我所拥有的,这就是它所显示的:hello world! document.getElementById('helloWorld'); 它的 div 或文本框是什么? html5 不支持罢工【参考方案4】:

如果#helloWorld 是一个DIV,那么你可以设置它的innerHTML 属性。

<div id="helloWorld"></div>

function setTextContent(msg, str) 
    msg.innerHTML = str;


var message = document.getElementById('helloWorld');
setTextContent(message, 'hello world!'.strike());

这里有一个小提琴来演示:http://jsfiddle.net/SXFLw/

【讨论】:

我应该在上面提到,但是我在另一个名为 totalPackage() 的函数中有这行代码,所以当我调用 totalPackage() 时,我希望它在没有任何 css 的情况下编写带有删除线的字符串。没有 DIV。 DIV 不是 CSS……它是 HTML。你需要学习一些基本的 HTML 和 CSS。【参考方案5】:

如果您想根据问题中的格式进行处理,您可以创建一个字符串原型方法来处理它。 String.strike() 是非标准的,您可能会遇到浏览器兼容性问题。

String.prototype.strike = function() 
    return '<div class="strike">'+ this +'</div>';
;

// <div class="strike"> hello world! </div>
var test = 'hello world!'.strike();

然后在 CSS 中你可以像这样创建一个名为 strike 的类。

.strike 
    text-decoration: line-through;

JSFiddle

【讨论】:

不,不,不。已经有一个 JavaScript 方法 str.strike():w3schools.com/jsref/jsref_strike.asp. 你真的只是提到w3学校吗? .strike()是不标准的。 抱歉,我以为您认为问题出在 strike 方法上。这是一个很好的观点,指出 MDN 是一个更好的参考。虽然很明显,OP 的问题是概念性的。【参考方案6】:

JavaScript 中已经有一个strike 方法,但它似乎不是标准的。 正常的实现只是将字符串包装在strike 标记中。但是,请注意,结果不再是简单的文本,因此将文本节点的textContent 属性设置为'some string'.strike() 不会给出预期的结果。它只会在文档中将标记显示为纯文本。

你总是可以实现一个 polyfill,比如:

if (!(typeof String.prototype.strike === 'function')) 
    String.prototype.strike = function () 
        return '<strike>' + this + '</strike>';
    ;

【讨论】:

虽然Strike.strike 是非标准的,但&lt;strike&gt; 也已被弃用。 Source @AustinBrunkhorst 这就是 Chrome 中的默认实现。 在 Chrome 中是的,但这就是问题所在。它不适用于所有浏览器。 @AustinBrunkhorst,这就是我建议使用 polyfill 的原因。即使在 MDN 上,罢工也是使用罢工标签实现的。

以上是关于如何为javascript删除字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何为类名组合字符串 + javascript? [复制]

压缩js和css文件的原理

如何为 Google BigQuery 转义 JavaScript UDF 中的字符?

如何为 Android Studio 中的所有配置删除未使用的字符串资源?

Sea.js 手册与文档

如何为列表框(JList)动态添加删除项?在线等