使用Mootools / Javascript来解析短代码

时间:2012-09-24 22:02:03

标签: javascript mootools

我需要在CMS文本区域中使用字符串/短代码来定义按钮......对于非技术用户来说非常简单:

[button text =“点击此处”href =“http://www.google.com”]

基于该字符串,我需要在前端使用mootools(或一般的javascript)动态创建一个按钮(jquery在我们的环境中不可用)。到目前为止,我还无法解析以括号开头的代码,然后抓取这些属性以便在代码中使用。然后我需要销毁原始的短代码。如果有更好的方法,它不必完全按照我上面的方式设置...任何建议都表示赞赏。

谢谢!

1 个答案:

答案 0 :(得分:0)

这是我提出的解决方案......这有点像黑客,但它有效。我正在使用的CMS是基于Coldfusion的,但该方法应该是可转移的......

另一个复杂性:在我们的例子中,我们需要可编辑按钮出现在与模板的可编辑区域分开的位置。基本上,我们在侧边栏中有一个不可编辑的按钮,我们希望从主要内容区域轻松编辑。因此,如果用户定义了一个按钮,我们将使用用户定义的按钮替换侧边栏按钮。所以我有一个额外的步骤,我使用mootools抓住创建的按钮,替换页面侧边栏中的按钮,然后销毁原始按钮。

目标是让用户在CMS的文本区域中的某处输入短代码,例如:

[button id="override-button" title="XXX" href="YYY"][/button]

后端会将其转换为DOM元素,而在前端,我们会使用mootools将按钮定位到需要的位置,然后销毁原始标记。

首先,我搜索了DB输出中的代码......

<cfset find1='\[button'>    <!-- open-->
<cfset find2='\]\[/button]'>    <!-- close -->

接下来,在coldfusion中使用正则表达式替换,我用标记替换了按钮的第一个实例...(rs.body指的是从数据库返回的正文数据)...

<cfset replace1 = "<button">
<cfset replace2 = "></button>">
<cfset rs.body=#REReplace(rs.body,find1,replace1,"ONE")#>
<cfset rs.body=#REReplace(rs.body,find2,replace2,"ONE")#>

因此,得到的标记将是:

<button id="override-button" title="XXX" href="YYY"></button>

接下来,我使用mootools来操纵那个DOM元素。如上所述,侧边栏中已经有一个按钮,其id为“open-form-b​​utton”,因此这会抓取该按钮并用上面定义的属性替换文本和链接,然后销毁上面定义的元素。

var overrideBtn = $('override-button');
var overrideBtn_title,overrideBtn_href = null;

if (overrideBtn) {
overrideBtn_title = overrideBtn.getProperty('title');
overrideBtn_href = overrideBtn.getProperty('href');

if (overrideBtn_title && overrideBtn_href)
{
    $('open-form-button').set('text', overrideBtn_title);
    $('open-form-button').setProperty('href',overrideBtn_href);
    overrideBtn.dispose();
}
}

就是这样。我不知道这对其他人有多大帮助,但自从朱利安建议我发布我的解决方案后,我希望它可以帮助一路上的人!祝你好运!