Javascript 我们如何在css中为具有特殊字符的单词设置样式?
我在angular 2(5.0)中提出了一个应用程序。该应用程序的全部内容是获取流行推文 我在造型时遇到了一个问题。我得到一段虽然API 在印度,自焚仍然是一种社会抗议形式。还记得那个叫w的家伙吗? 我需要的是,我想给那些有Javascript 我们如何在css中为具有特殊字符的单词设置样式?,javascript,html,css,angular,sass,Javascript,Html,Css,Angular,Sass,我在angular 2(5.0)中提出了一个应用程序。该应用程序的全部内容是获取流行推文 我在造型时遇到了一个问题。我得到一段虽然API 在印度,自焚仍然是一种社会抗议形式。还记得那个叫w的家伙吗? 我需要的是,我想给那些有#和@ 例如: @InTheWordsOfK @maidros78 #ereaad 那么,有没有可能在不使用JavaScript的情况下为此类单词添加一些基本样式呢?? 我们能用CSS解决它吗?怎么做 注意:我使用的是SCSS。这不是仅使用CSS就可以完成的。您将需要J
#
和@
例如:
@InTheWordsOfK
@maidros78
#ereaad
注意:我使用的是SCSS。这不是仅使用CSS就可以完成的。您将需要JavaScript和下面的示例在原始JS中,而不需要任何框架,但它可以在任何框架中使用 试试这个:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Twitter CSS 1</title>
<style>
#input {
font: 14px/1.2em Tahoma;
height: 12em;
width: 500px;
}
.class-at {
color: blue;
}
.class-hash {
color: green;
}
</style>
</head>
<body>
<h3>Enter Text Here</h3>
<textarea id="input">@_NAN_DINI @InTheWordsOfK @maidros78 Self immolation is still a form of social protest in India. Remember the guy w…</textarea>
<hr/>
<div id="output"></div>
<script>
var inEl = document.getElementById('input');
var outEl = document.getElementById('output');
function encodeStr(str) {
return str.replace(/(\@\S+)/g, (key) => `<span class="class-at">${key}</span>`).replace(/(\#\S+)/g, (key) => `<span class="class-hash">${key}</span>`);
}
function inputHandler() {
outEl.innerHTML = encodeStr(inEl.value);
}
inEl.addEventListener('input', inputHandler);
inputHandler();
</script>
</body>
</html>
这不是只有CSS才能做到的。您将需要JavaScript和下面的示例在原始JS中,而不需要任何框架,但它可以在任何框架中使用 试试这个:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Twitter CSS 1</title>
<style>
#input {
font: 14px/1.2em Tahoma;
height: 12em;
width: 500px;
}
.class-at {
color: blue;
}
.class-hash {
color: green;
}
</style>
</head>
<body>
<h3>Enter Text Here</h3>
<textarea id="input">@_NAN_DINI @InTheWordsOfK @maidros78 Self immolation is still a form of social protest in India. Remember the guy w…</textarea>
<hr/>
<div id="output"></div>
<script>
var inEl = document.getElementById('input');
var outEl = document.getElementById('output');
function encodeStr(str) {
return str.replace(/(\@\S+)/g, (key) => `<span class="class-at">${key}</span>`).replace(/(\#\S+)/g, (key) => `<span class="class-hash">${key}</span>`);
}
function inputHandler() {
outEl.innerHTML = encodeStr(inEl.value);
}
inEl.addEventListener('input', inputHandler);
inputHandler();
</script>
</body>
</html>
定义可能导致性能瓶颈的繁重JavaScriptScript,例如:我们可以使用两个for循环并用@或#标识单词,然后应用样式或样式类。但它可能会对应用程序的性能造成威胁。如果只是一个字符串,则不会。样式化元素需要位于额外的DOM元素(通常是一个跨度)中。如果还没有,你需要Javascript来包装你想要风格化的单词。那么你所需要的就是一个CSS类。这在纯CSS中是不可能的。一种解决方案是设置一个特殊字符数组,如果一个单词包含一个特殊字符,将其包装在
span
中,然后设置span
的样式。您不需要两个循环。你可以用正则表达式来实现这一点。但是,正如其他人所提到的,仅仅使用CSS是不行的。但是js可能是一个单行程序,绝对不是“重”定义的重JavaScriptScript,这可能会导致一些性能瓶颈,例如:我们可以使用两个for循环并用@或#标识单词,然后应用样式或样式类。但它可能会对应用程序的性能造成威胁。如果只是一个字符串,则不会。样式化元素需要位于额外的DOM元素(通常是一个跨度)中。如果还没有,你需要Javascript来包装你想要风格化的单词。那么你所需要的就是一个CSS类。这在纯CSS中是不可能的。一种解决方案是设置一个特殊字符数组,如果一个单词包含一个特殊字符,将其包装在span
中,然后设置span
的样式。您不需要两个循环。你可以用正则表达式来实现这一点。但是,正如其他人所提到的,仅仅使用CSS是不行的。但是js可能是一行,绝对不是“重”的。我不理解你的评论,我的代码是纯js的。不需要框架。嘿,伙计,我的问题是关于angular 2中的解决方案,当我在angular 2中尝试你的解决方案时,它工作不好,你能发布你的代码吗?我提供的功能可以在任何框架中使用。您的代码只需要获取字符串并将其传递给我的函数,然后获取结果并使用它,但是您的框架需要使用它。但是发布你的代码,我应该能够向你展示如何使用它。这个函数可以正常工作,但是这个ids无法从角度组件获取数据,它将变为null。请发布你的代码,并说明它失败的地方,然后我可以帮助解决它。我不理解你的评论,我的代码是纯JS。不需要框架。嘿,伙计,我的问题是关于angular 2中的解决方案,当我在angular 2中尝试你的解决方案时,它工作不好,你能发布你的代码吗?我提供的功能可以在任何框架中使用。您的代码只需要获取字符串并将其传递给我的函数,然后获取结果并使用它,但是您的框架需要使用它。但是发布你的代码,我应该能够向你展示如何使用它。该函数可以正常工作,但此ID无法从角度组件获取数据,它将变为null。请发布你的代码,并显示失败的地方,然后我可以帮助解决它。