我试图在CMS (Alterian)的内容上使用jQueryTools实现工具提示功能。这样做的想法是,编辑器在文本中的文字中标记一个散列和括号,只要他们想要一个工具提示,即“#扳机词(工具提示内容)”。在请求时,使用正则表达式修改HTML,在每个触发词后面插入工具提示div,如下所示:
...replace(/#(\w[\s\S]*?)\(([\s\S]*?)\)/g, "<span class='tipword'>$1</span><div class='tooltip'>$2</div>");这在许多情况下都很好,但是触发器也可能出现在P标记中。编辑器编写他们的文本,这些文本被CMS存储为HTML。我控制不了P标签的使用。当您在P-标记中放置div时,将在插入div之前自动关闭P标记。当然,这会破坏文本的布局,而且由于触发词和工具提示-div不再相邻,工具提示不起作用。
当来自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>..。布局和工具提示都坏了。
向我建议的一个解决方案是将工具提示span和div封装在对象标记中:
...replace(/#(\w[\s\S]*?)\(([\s\S]*?)\)/g, "<object><span class='tipword'>$1</span><div class='tooltip'>$2</div></object>");这真的很管用!即使是在P标签里!适用于Firefox和Chrome,但不适用于IE。IE修改DOM并将tipword HTML放入对象标记的altHtml属性中:
<object altHtml="<span ..... /div>"/>我的90%以上的(公司内)用户使用IE,所以我不能忽视那个浏览器(正如我想要的那样)。
有人对接下来的尝试有什么建议吗?你们是我最后的选择。我担心我将不得不忘记我的好工具提示div,转而使用标准的浏览器工具提示(title-属性)。
谢谢!
巴特
发布于 2011-07-01 15:55:24
下面的答案是编辑,以同意一个具体的方法,从一个最初的含糊的答案。
主要的问题是,p绝对不能包含块级元素(例如,另一个p,div)。在这些页面的chrome中,浏览器会重新损坏html,并且很难用标准的.html验证工具找出这一点。所以要注意这一点。
因此,您基本上是被迫将工具提示的内容放在其他地方。我认为最简单、最优雅的方法是,以字符串的形式收集div属于工具提示的内容,并将它们附加到网页底部,作为隐藏。(我从未使用过Alterian,但我认为它应该支持插件的这种功能?)然后移动&点击/悬停显示这些div。我试着在这里展示这样的网页:http://jsfiddle.net/NaDeh/1/,它有几十行长。
原则上,您也可以将div的内容放在其他地方,比如javascript字符串,但是您需要小心地转义;或者在另一个页面中加载ajax,但是这样的额外负载似乎没有必要。
https://stackoverflow.com/questions/6122666
复制相似问题