1、首先是前端js,自顶一个customtag标签及属性,内容可以按照真实的样式模拟:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <link type="text/css" rel="stylesheet" href="//repo.bfw.wiki/bfwrepo/css/grapesjs-preset-webpage.min.css"> <link type="text/css" rel="stylesheet" href="//repo.bfw.wiki/bfwrepo/css/grapes.min.css"> <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/grapes.min.js"></script> <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/grapesjs-preset-webpage.min.js"></script> <style> body, html { height: 100%; margin: 0; } </style> </head> <body> <div id="gjs"> </div> <script> const editor = grapesjs.init({ container: '#gjs', height: '100%', fromElement: true, storageManager: false, }); editor.DomComponents.addType('customtag', { model: { defaults: { // 设定组件的类型 type: 'customtag', // 设定组件的标签 tagName: 'customtag', // 不允许组件被选中以防止内容改变 selectable: false, // 标记组件不能被拖动 draggable: false, // 给组件一个特殊属性,稍后用于服务器端识别 attributes: { 'data': '123',"class":'bfw' }, // 组件在画布上的显示内容 content: '这里可替换模拟真实标签内容' } }, view: { // 可以是一个自定义函数来渲染此组件的模板 } }); // 现在在编辑器中添加这个自定义组件 editor.addComponents({ type: 'customtag' }); </script> </body> </html>
2、后端我们以php为例,解析customtag标签数据最终替换整个标签内容:
<?php // HTML字符串 $htmlContent = '<div><customtag class="bfw" data="1">内容</customtag><p data-template="true">Old Content</p><span>Irrelevant content</span><p data-template="true">Other old content</p><customtag class="bfw" data="2">内容</customtag></div>'; // 创建DOMDocument实例 $dom = new DOMDocument(); // 加载HTML内容 @$dom->loadHTML($htmlContent); // 创建DOMXPath实例 $xpath = new DOMXPath($dom); // 通过DOMXPath查询找到所有具有data-template属性的<p>标签 $templateNodes = $xpath->query('//customtag[@class="bfw"]'); foreach ($templateNodes as $node) { // 创建一个新元素<div>来替换旧的<p>标签 $newNode = $dom->createElement('div', 'New Content'); $node->nodeValue = 'New Content'; echo $node->getAttribute('data'); // 可选: 如果你需要将属性从旧元素复制到新元素 // foreach ($node->attributes as $attribute) { // $newNode->setAttribute($attribute->name, $attribute->value); // } // 使用新元素替换原有的元素 $node->parentNode->replaceChild($newNode, $node); // 替换节点的内容 } // 获取新的HTML内容并输出 $newHtmlContent = $dom->saveHTML(); echo $newHtmlContent; ?>
网友回复
DLNA与UPnP的区别和不同?
苏超自建抢票app,通过先预约再抽签化解高并发抢票?
python如何让给电脑在局域网中伪装成电视接收手机的投屏图片视频播放?
如何结合python+js如何自己的视频编码与加密播放直播?
python如何在电脑上通过局域网将本地视频或m3u8视频投屏电视播放?
腾讯视频爱奇艺优酷vip电影电视剧视频如何通过python绕过vip收费直接观看?
有没有可免费观看全球电视台直播m3u8地址url的合集?
有没有实现观影自由的免vip影视苹果 CMS V10 API的可用url?
python如何实时检测电脑usb插入检测报警?
如何判断真人操作的鼠标移动直线轨迹与机器操作的轨迹?