Javascript 将HTML转换为呈现的HTML
下面是我的应用程序的简化版本,其中页面上呈现了一个模板,并在两个文本输入的帮助下填充 这是一个“模板生成器”类型的应用程序,我希望能够复制页面上呈现的完整模板,以便将其粘贴到其他地方。要正常执行此操作,请单击并拖动以高亮显示呈现的html,然后右键单击并复制或ctrl+c 如何将HTML转换为渲染版本,以便在Javascript 将HTML转换为呈现的HTML,javascript,html,reactjs,clipboard,Javascript,Html,Reactjs,Clipboard,下面是我的应用程序的简化版本,其中页面上呈现了一个模板,并在两个文本输入的帮助下填充 这是一个“模板生成器”类型的应用程序,我希望能够复制页面上呈现的完整模板,以便将其粘贴到其他地方。要正常执行此操作,请单击并拖动以高亮显示呈现的html,然后右键单击并复制或ctrl+c 如何将HTML转换为渲染版本,以便在react clipboard按钮的帮助下复制到剪贴板?或者我还有别的方法可以做到这一点吗 如果有什么不清楚的,请让我知道-提前谢谢 TL;DR:目前,当你点击“复制到剪贴板”时,应用程序正
react clipboard
按钮的帮助下复制到剪贴板?或者我还有别的方法可以做到这一点吗
如果有什么不清楚的,请让我知道-提前谢谢
TL;DR:目前,当你点击“复制到剪贴板”时,应用程序正在复制html。我希望它复制的内容,因为它将在网页上呈现。例如,转换和复制的hello world应复制一个表示hello world的红色h1
import React, { Component } from 'react';
import { TextField } from 'material-ui';
import Clipboard from 'react-clipboard.js';
import './App.css';
const logo = 'https://www.google.co.uk/images/branding/googlelogo/2x/googlelogo_color_120x44dp.png';
class App extends Component {
constructor() {
super();
this.state = {
name: 'Default Name',
title: 'Default Title'
};
}
componentDidMount() {
this.setState({template: this.createTemplate(this.state.name, this.state.title) });
}
createTemplate(name, title) {
const template = `<!DOCTYPE html>
<html>
<head>
<link href="https://fonts.googleapis.com/css?family=Montserrat:400,700" rel="stylesheet">
</head>
<body>
<h1>${name}</h1>
<h2>${title}</h2>
</body>
</html>`
this.setState({template});
}
updateValue(event, type) {
if(type === 'name') {
this.setState({name: event.target.value});
this.createTemplate(event.target.value, this.state.title);
} else {
this.setState({title: event.target.value});
this.createTemplate(this.state.name, event.target.value);
}
}
render() {
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<h1 className="App-title">Signature Builder</h1>
</header>
<div>
<br/>
<TextField hintText="Name" onChange={(e) => this.updateValue(e, 'name')} />
<TextField hintText="Title" onChange={(e) => this.updateValue(e, 'title')} />
<div style={{textAlign: 'left', margin: 10}} dangerouslySetInnerHTML={{ __html: this.state.template }} />
<Clipboard data-clipboard-text={this.state.template}>
copy to clipboard
</Clipboard>
</div>
</div>
);
}
}
export default App;
import React,{Component}来自'React';
从“材料ui”导入{TextField};
从“react Clipboard.js”导入剪贴板;
导入“/App.css”;
康斯特标志https://www.google.co.uk/images/branding/googlelogo/2x/googlelogo_color_120x44dp.png';
类应用程序扩展组件{
构造函数(){
超级();
此.state={
名称:“默认名称”,
标题:“默认标题”
};
}
componentDidMount(){
this.setState({template:this.createTemplate(this.state.name,this.state.title)});
}
createTemplate(名称、标题){
常量模板=`
${name}
${title}
`
this.setState({template});
}
updateValue(事件,类型){
如果(类型=='name'){
this.setState({name:event.target.value});
this.createTemplate(event.target.value,this.state.title);
}否则{
this.setState({title:event.target.value});
this.createTemplate(this.state.name、event.target.value);
}
}
render(){
返回(
签名生成器
this.updateValue(e,'name')}/>
this.updateValue(e,'title')}/>
复制到剪贴板
);
}
}
导出默认应用程序;
您可以使用ReactDOMServer.renderToStaticMarkup
将React组件转换为字符串,而不使用任何React特定的标记。如果您希望HTML稍后水合,可以使用renderToString
您可以使用
ReactDOMServer.renderToStaticMarkup
将React组件转换为字符串,而不使用任何React特定的标记。如果您希望HTML稍后水合,可以使用renderToString
问题是
react剪贴板
不支持复制HTML文本;您只需使用普通JS即可。不幸的是,剪贴板API相当挑剔
通过不使用按钮并捕获onCopy事件来更改剪贴板复制的内容,您可以绕过一些问题
constcopyaction=e=>{
e、 预防默认值()
e、 setData('text/plain',这是纯文本;请尝试粘贴到支持富文本的程序中')
e、 setData('text/html','HelloWorld')
console.log('Copy event captured!')
}
常量应用=()=>(
模仿我!
)
ReactDOM.render(,
document.getElementById('root'))
问题是
react剪贴板
不支持复制HTML文本;您只需使用普通JS即可。不幸的是,剪贴板API相当挑剔
通过不使用按钮并捕获onCopy事件来更改剪贴板复制的内容,您可以绕过一些问题
constcopyaction=e=>{
e、 预防默认值()
e、 setData('text/plain',这是纯文本;请尝试粘贴到支持富文本的程序中')
e、 setData('text/html','HelloWorld')
console.log('Copy event captured!')
}
常量应用=()=>(
模仿我!
)
ReactDOM.render(,
document.getElementById('root'))
虽然它是一个字符串,但它不是一个react组件(请参见const template
)-这基本上是我想要复制的内容,但在网页上“呈现”(或任何单词)。那也一样吗?哦,对不起,我完全误解了。是否要从HTML代码段复制富文本?您可以尝试向页面呈现HTML,突出显示它,并触发一个副本,但不能保证。虽然它是一个字符串(请参见const-template
),但它不是一个react组件-这基本上是我想要复制的内容,但“呈现”为网页(或任何单词)。那也一样吗?哦,对不起,我完全误解了。是否要从HTML代码段复制富文本?您可以尝试向页面呈现HTML,突出显示它,并触发一个副本,但不能保证。