6

我想在 Javascript 中删除文本,但我似乎无法让代码工作。

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

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

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

4

6 回答 6

16

使用Unicode 字符“组合长笔画叠加”(U+0336)

例子

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, '')
于 2018-12-18T15:13:51.493 回答
3

尝试这个

var message = document.getElementById('helloWorld');
message.innerHTML='<del>helloworld</del>'
于 2013-08-17T05:29:26.757 回答
0

如果#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/

于 2013-08-17T05:03:29.520 回答
0

如果您想根据问题中的格式执行此操作,您可以创建一个字符串原型方法来处理它。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

于 2013-08-17T05:05:10.890 回答
0

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

所以像这样使用

 setTextContent(message, 'hello world!'.strike());
于 2013-08-17T05:05:23.800 回答
0

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

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

if (!(typeof String.prototype.strike === 'function')) {
    String.prototype.strike = function () {
        return '<strike>' + this + '</strike>';
    };
}
于 2013-08-17T05:18:26.337 回答