JavaScript(不要与Java混淆)是一种高级,动态,多范式,面向对象,基于原型的弱类型语言,用于客户端和服务器端脚本。它的主要用途是渲染和操作网页。使用此标记可以了解有关ECMAScript及其各种方言/实现的问题(不包括ActionScript和Google-Apps-Script)。
将变量替换为包含 HTML 的 JavaScript 字符串中数据库中的值
我从编辑器收到了一个字符串,其中包含 HTML 标签,如下所示: const htmlString = "帐户 {{帐户}} 我从编辑器收到一个字符串,其中包含 HTML 标签,如下所示: const htmlString = "<div>Account <span contenteditable="false">{{account}}</span></div>. <div>Hello <span contenteditable="false">{{hello}}</span></div>" 在此内容中,有两个格式为 {{account}} 和 {{hello}} 的变量。 在我的数据库中,我以格式存储变量数据 { key: string, value: string, isDefault: boolean }: [ { "key" : "account", "value" : "", "isDefault" : true, }, { "key" : "hello", "value" : "Hello everyone", "isDefault" : false } ] 首先,我使用一个函数来删除 HTML 标签: const blockTags = /<(div|h1|h2|h3|h4|h5|h6|p|ul|ol|li|br)[^>]*>/gi; const inlineTags = /<\/?(span|a|strong|em|b|i|u)[^>]*>/gi; let content = htmlString.replace(blockTags, '\n').replace(/<\/(div|h1|h2|h3|h4|h5|h6|p)>/gi, '\n'); content = content.replace(inlineTags, ''); content = content.replace(/<[^>]+>/g, ''); content = content.replace(/\n\s*\n/g, '\n').trim(); 然后,我提取变量: const variables = (content.match(/\{\{(.*?)\}\}/gi) || []).map((item) => item.replace(/\{\{|\}\}/g, '')); 最后,我使用一个函数将所有变量替换为数据库中的相应值,如果变量是默认值(isDefault = true),我将根据系统规则根据配置替换为动态值: const objVariables = variables.reduce((acc, { key, value, isDefault }) => { acc[key] = { value, isDefault }; return acc; }, {}); const result = content.replace(/\{\{(.*?)\}\}/g, (match, variable) => { const variableData = objVariables[variable]; if (variableData && variableData.isDefault) { if (variable === "account") { return "ACCOUNT_NAME"; } } return variableData ? variableData.value : match; }); 我想用数据库中存储的值替换 HTML 字符串中的所有变量,但我认为我的代码不是最好的解决方案,而且可能很慢。我正在寻找优化的解决方案或任何建议。 我认为你应该迭代你的变量并替换它们(如果在字符串中找到它们)...不需要删除标签。 const myVariables = [ { "key" : "account", "value" : "", "isDefault" : true }, { "key" : "hello", "value" : "Hello everyone", "isDefault" : false }, ]; let myString = myContent.innerHTML; myVariables.forEach ( variableData => { const { key, value, isDefault } = variableData; myString = myString.replace ( `{{${key}}}`, ( ( isDefault && ( key === 'account' ) ) ? 'ACCOUNT_NAME' : value ?? key ) ); } ); myContent.innerHTML = myString; <div id="myContent"> <div>Account <span contenteditable="false">{{account}}</span>.</div> <div>Hello <span contenteditable="false">{{hello}}</span></div> </div> 请注意,在上面的示例中,甚至没有触及 html。
JavaScript:无法在第一次加载时使用自定义类为文本区域设置值
问题:我正在尝试使用以下代码以编程方式在文本区域内设置一个值: 函数 setTextareaValue(textareaId, 值) { // 递归函数等待元素...
AEM 中的页面导航是否应通过 javascript 或锚标记处理?
我的主页上有 4 个按钮,单击它后我想在另一个页面上导航。 我首先尝试了这样的事情。 我的主页上有 4 个按钮,单击它后我想在另一个页面上导航。 我首先尝试过这样的事情。 <a href="/content/travel/us/en/addticket.html" class="button-link"> <button class="add-ticket"> <span> ADD LEADS </span> </button> </a> 但它不起作用。 然后我尝试使用 javascript 来完成此操作,并且重定向工作正常。 HTML <button class="add-ticket"> <span> ADD LEADS </span> </button> Js document.addEventListener('DOMContentLoaded', function(){ const addticketbutton =document.getElementById('add-ticket'); if(addticketbutton){ addticketbutton.addEventListener('click', function(){ window.location.href="/content/travel/us/en/addticket.html"; }); }); 我在使用 javascript 时遇到的问题通常是我需要重新加载页面或刷新。有时重定向有效有时无效。此外,achor 标签还为我们提供了在新选项卡中打开的选项。 我是 AEM 初学者,不知道如何执行此操作。 我对AEM不熟悉,但也许你可以更改代码。 HTML - 您不需要将文本包装在跨度中,除非您想更改其中某些文本的颜色。 <a href="/content/travel/us/en/addticket.html" class="button-link"> <button class="add-ticket">ADD LEADS</button> </a> 另外,你真的需要这个按钮吗? <a href="/content/travel/us/en/addticket.html" class="button-link add-ticket">ADD LEADS</a> 有了这段代码,你就不需要js了。如果你确实想做js,请Ping。 还有一些来自 Adobe 的有关在 AEM 中嵌入链接的文档。
当我尝试创建一个函数来交换两个数组时,原始数组保持不变。 函数交换(x,y){ var 温度 = x; x = y; y = 温度; } u=[1, 0]; v=[0, 1]; 交换(u,v); 控制台.log(u);
我有以下代码: MyObject.prototype.doIt = 函数() { var a = this.obj1; var b = this.obj2; } 我如何交换 this.obj1 和 this.obj2 的值,使 obj1 变成 obj2 并...
我怎样才能让我的javascript正则表达式只接受右括号(如果它已经匹配左括号)
我正在尝试制作一个仅接受列出格式的电话号码的正则表达式。但是,如果我用右括号结束第一个三位数组,而在开头没有左括号,那么...
即使没有发出很多请求,我也收到错误 Error 429 Too much requests on createIngress in Livekit
我正在努力集成 LiveKit 的 API 来管理应用程序中的流,并且在尝试创建新入口时遇到了问题。每次我尝试使用
使用 pdf.js 4.4.168 时,Promise.withResolvers 不是一个函数
我正在使用 pdf.js 4.4.168 在浏览器中渲染一些 pdf,今天当我使用 safari 16.4 打开该网站时,显示错误: 意外的应用程序错误! Promise.withResolvers 不是一个函数。 (在“舞会...
我需要在按下回车键和模糊事件时获取输入值。所以我创建了两个函数: 处理模糊前夕...
我需要将我的VS代码连接到SAP系统,因为我需要开发一个实习生网上商店。不幸的是,我找不到 SAP ERP 的任何内容,只是在 SAP HANA 或 S4/HANA 上我可以找到一些东西。我发现...
当 JavaScript 函数以如下方式声明时,这意味着什么: JSON.stringify = JSON.stringify ||函数(对象) { //东西 }; 上述内容与仅仅声明它有什么不同...
我正在编写一个函数来检查页面上的表格是否为空,并根据需要插入带或不带标题的行。 页面本身的代码是:
我在JavaScript中使用这个方法Enums?在我们的代码中创建枚举.. 所以 var 类型 = { “白色”:0, “黑色”:1 } 现在的问题是,当我想在任何地方创建验证时,我必须这样做;
我需要导出房地产的批量数据。有一个选项可以用标题替换网址,但你必须在谷歌表格中一一进行。我希望看看是否有一种方法可以更快地完成
我有一个简单的 NextJS 应用程序,其中有一个调用 API 路由的客户端组件。 我正在尝试访问我创建的路线中的一些搜索参数,但它始终返回 null。 我的客户com...
我学的是expressjs,在其中传递值,但不进入输出。我创建了一个新的Routes文件,并希望成为一个带有Route方法的函数,所以这就完成了。但如果我设置了路线...
我有以下标记和代码: 我有以下标记和代码: <img alt="image321" onclick="image(//here i want to pass the alt attribute to my function Bild()//);" src="http://i3.ytimg.com/vi/${videoId}/hqdefault.jpg" /> <script> function image(alt) { alert(alt.src); } </script> 我有我的图像,并为其赋予了一个值为 image321 的 alt 属性。现在我想将此值传递给我的函数image(),并在单击图像后立即输出带有警报的值。但输出总是“未定义”。 有人可以帮我解决这个问题吗? 许多问候尼尔斯 首先要避免内联处理程序 - 它们有很多问题,现在太多了,不值得使用,例如疯狂的作用域链和引用转义问题。使用 Javascript 并使用 addEventListener 正确附加事件侦听器。 在侦听器内,引用 this 来获取单击的元素,并引用其 src 属性来获取其 src: document.querySelector('img').addEventListener('click', function() { console.log(this.src); console.log(this.alt); }); <img alt="image321" src="http://i3.ytimg.com/vi/${videoId}/hqdefault.jpg" /> function myfunc(img){ alert(img.alt); } <img alt="image321" onclick="myfunc(this);" src="http://i3.ytimg.com/vi/${videoId}/hqdefault.jpg" /> 您应该尝试使用 this,它会发送您运行该函数所用的元素。 这是一个例子: function image(alt) { alert(alt.src); } <img alt="image321" src="http://i3.ytimg.com/vi/${videoId}/hqdefault.jpg" onclick="image(this)"/>
我刚刚开始在我的一个项目中使用 ag-grid,并且我正在使用“agSelectCellEditor”单元格编辑器来编辑两列:“function”和“project_role”。选择选项...
问题 2070. 每次查询最美丽的物品 给定一个 2D 整数数组 items,其中 items[i] = [price i, beauty i] 分别表示商品的价格和美观。 你也是……