Javascript 使用JS和VueJS将HTML内容缩减到20个单词?
我正在使用VueJS创建一个新闻提要,在呈现内容时遇到了一些问题。我正在使用的API很遗憾,我现在无法进行适当的更改以满足我的需要。API为我提供了HTML标记中的所有内容,它还可以包括图像、列表和所有其他基础内容。我想做的是创建一个“readmore”部分,它将呈现前20个单词,如果只是第一个“p”标记的文本,那么就到此为止 有人知道用JS做这件事的快速有效的方法吗? 我当前的显示VueJS渲染如下所示:Javascript 使用JS和VueJS将HTML内容缩减到20个单词?,javascript,html,vue.js,vuejs2,Javascript,Html,Vue.js,Vuejs2,我正在使用VueJS创建一个新闻提要,在呈现内容时遇到了一些问题。我正在使用的API很遗憾,我现在无法进行适当的更改以满足我的需要。API为我提供了HTML标记中的所有内容,它还可以包括图像、列表和所有其他基础内容。我想做的是创建一个“readmore”部分,它将呈现前20个单词,如果只是第一个“p”标记的文本,那么就到此为止 有人知道用JS做这件事的快速有效的方法吗? 我当前的显示VueJS渲染如下所示: <div v-for="news_item in news_items">
<div v-for="news_item in news_items">
<div v-bind:class="{ 'col-md-4': display}">
<div class="card">
<div class="header">
<h2>
{{news_item.title}} <small>{{news_item.subtitle}}</small>
</h2>
</div>
<div class="body" style="padding-top: 0">
<div class="row" style="margin-right: -20px; margin-left: -20px;">
<div class="col-md-12"
style="padding-left: 0px; padding-right: 0px;">
<img :src="news_item['thumbnail']"
class="img-responsive smaller-img" alt=""
style=" margin: 0 auto; max-height: 250px;">
</div>
</div>
<div class="row">
<div class="col-md-12">
<div v-html="news_item.content"></div>
</div>
</div>
</div>
</div>
</div>
</div>
{{news_item.title}{{news_item.subtitle}}
粗略实现,纯Js方法
document.getElementById(“addContent”).onclick=display;
document.getElementById(“省略号”).onclick=hideEllipsis;
函数显示(){
document.getElementById(“指令”).classList+=“隐藏”;
让内容=document.getElementById(“inputbox”).value;
如果(content.length>30){
设sliced=content.slice(30);
设unsliced=content.substring(0,29);
设spantag=document.createElement(“span”);
spantag.className=“重新放置隐藏”
让text=document.createTextNode(切片);
spantag.appendChild(文本);
设spantag1=document.createElement(“span”);
设text1=document.createTextNode(未许可);
spantag1.追加子项(text1);
让contentTag=document.getElementById(“内容”);
contentTag.appendChild(spantag1)
contentTag.appendChild(spantag)
document.getElementById(“省略号”).classList-=“隐藏”;
}
}
函数hideEllipsis(){
document.getElementById(“省略号”).classList+=“隐藏”;
document.queryselectoral(“span.hide”)[0]。类列表-=“hide”
}
.hide{
显示:无;
}
显示内容
键入超过30个字符,然后单击“显示内容”
粗略实现,纯Js方法
document.getElementById(“addContent”).onclick=display;
document.getElementById(“省略号”).onclick=hideEllipsis;
函数显示(){
document.getElementById(“指令”).classList+=“隐藏”;
让内容=document.getElementById(“inputbox”).value;
如果(content.length>30){
设sliced=content.slice(30);
设unsliced=content.substring(0,29);
设spantag=document.createElement(“span”);
spantag.className=“重新放置隐藏”
让text=document.createTextNode(切片);
spantag.appendChild(文本);
设spantag1=document.createElement(“span”);
设text1=document.createTextNode(未许可);
spantag1.追加子项(text1);
让contentTag=document.getElementById(“内容”);
contentTag.appendChild(spantag1)
contentTag.appendChild(spantag)
document.getElementById(“省略号”).classList-=“隐藏”;
}
}
函数hideEllipsis(){
document.getElementById(“省略号”).classList+=“隐藏”;
document.queryselectoral(“span.hide”)[0]。类列表-=“hide”
}
.hide{
显示:无;
}
显示内容
键入超过30个字符,然后单击“显示内容”
您似乎还没有尝试过任何东西,所以我将给您这些提示。如果遇到具体问题,请再次询问
blurb() {
const div = document.createElement('div');
div.innerHTML = this.content; // this.content is the prop
const firstP = div.querySelector('p');
const text = firstP.textContent;
const match = text.match(/(\S+\s*){0,20}/);
return match[0];
}
你似乎还没有尝试过什么,所以我给你一些建议。如果遇到具体问题,请再次询问
blurb() {
const div = document.createElement('div');
div.innerHTML = this.content; // this.content is the prop
const firstP = div.querySelector('p');
const text = firstP.textContent;
const match = text.match(/(\S+\s*){0,20}/);
return match[0];
}
这是使用指令的最佳时机: 请参见此处的代码笔: 使用
trim
指令,可以更改元素的内容。在上面的示例中,它将显示前5个单词,后跟一个省略号
如果您只是想要一个纯js解决方案,这应该可以做到:
var resultString = str.split(' ').slice(0, 20).join(" ");
您可以使用trim指令,在
el
中搜索任何p
标记,然后相应地更改其内容 这是使用指令的最佳时机:
请参见此处的代码笔:
使用trim
指令,可以更改元素的内容。在上面的示例中,它将显示前5个单词,后跟一个省略号
如果您只是想要一个纯js解决方案,这应该可以做到:
var resultString = str.split(' ').slice(0, 20).join(" ");
您可以使用trim指令,在
el
中搜索任何p
标记,然后相应地更改其内容 您可以编写vue指令来解决此问题
<ellipsis :content="someData"></ellipsis>