我目前正在努力重新实现Facebook的国际化XFBML标签的前端,该标签已经被打破了很长一段时间。我几乎已经完成但有一个挂断:更换标记化的翻译而不会丢失子节点'信息。
对于背景,翻译标签看起来像这样:
<fb:intl>
Text goes here and you can have {a-token} like this.
<fb:intl-token name="a-token">parameters</fb:intl>
</fb:intl>
你传给他们一个这样的字符串:
Text goes here and you can have {a-token} like this.
你得到一个翻译过的字符串:El texto va aquí y usted puede tener {a-token} como ésta.
即使您可以输入动态数据,也可以只翻译一次字符串。很酷的部分(和问题)是你可以嵌套这些字符串。因此,而不是&#34;参数&#34;的纯文本。在令牌内部,它可能在其内部有另一个嵌套的fb:intl
标签(反过来可能在其中有另一个标签等)。
我要做的是在不丢失子节点的上下文的情况下进行此替换。所以我想只需要使用<fb:intl-token>
标记并将其移动以替换代表其在字符串中的位置的{token}
。
关于如何有效地做到这一点的任何想法?
答案 0 :(得分:0)
经过相当多的黑客攻击后,我能够找到解决方案。
psuedocode是这样的:
.clone(true)
克隆原始元素(以维护所有原始数据等)。.empty()
清空克隆元素。.html()
设置为令牌的正则表达式替换为html元素,以便可以通过jQuery轻松操作它们:.replace(/{([a-zA-Z\-]+)}/, '<span id="$1"></span>')
。fb:intl-token
子元素,并为每个子元素执行$(this).insertBefore(placeHolder);
(其中placeHolder是步骤3中替换的标记 - 这就是为什么其id基于令牌名称)到目前为止,这似乎只是花花公子。