我正在尝试使用 jQueryTools 在来自 CMS(Alterian)的内容上实现工具提示功能。这个想法是编辑者在他们想要工具提示的地方用哈希和括号标记文本中的单词,即“#triggerword(工具提示内容)。在请求时,使用正则表达式更改 HTML,并在每个之后插入工具提示 div触发词,像这样:
...replace(/#(\w[\s\S]*?)\(([\s\S]*?)\)/g, "<span class='tipword'>$1</span><div class='tooltip'>$2</div>");
这在许多情况下都可以正常工作,但触发词也可能出现在 P-tags 中。编辑编写他们的文本,这些文本由 CMS 存储为 HTML。我无法控制 P-tags 的使用。当您将 div 放入 P-tag 中时,P-tag 在插入 div 之前会自动关闭。这当然会破坏文本的布局,并且因为触发词和 tooltip-div 不再相邻,所以 tooltip 不起作用。
当来自 CMS 的 HTML 类似于:
<P>
some text with a #triggerword (it's a word that triggers a tooltip to appear)
and the text goes on....
</P>
然后在进行工具提示转换后,DOM 读取:
<P>
some text with a <SPAN class='tipword'>triggerword</SPAN>
</P>
<DIV class='tooltip'>it's a word that triggers a tooltip to appear</DIV>");
and the text goes on....
<P></P>
...并且布局和工具提示已损坏。
向我建议的一个解决方案是将工具提示跨度和 div 包装在对象标记中:
...replace(/#(\w[\s\S]*?)\(([\s\S]*?)\)/g, "<object><span class='tipword'>$1</span><div class='tooltip'>$2</div></object>");
这确实有效!即使在 P-tags 中!适用于 Firefox 和 Chrome,但不适用于 IE。IE 更改 DOM 并将提示词 HTML 放入 object-tag 的 altHtml-property:
<object altHtml="<span ..... /div>"/>
我的(公司)用户中有超过 90% 使用 IE,所以我不能忽略那个浏览器(我想尽可能多地)。
有人对下一步要尝试什么有建议吗?你们是我最后的手段。我担心我将不得不忘记我漂亮的工具提示 div 并改用标准浏览器工具提示(标题属性)。
谢谢!
巴特