Javascript:需要解决方法:Internet Explorer在更改href时更改链接文本

Man*_*nne 5 javascript wysiwyg internet-explorer tinymce

我有一个问题如下:我们在我们的应用程序中使用了一个富文本编辑器(TinyMCE,但这在我看来并不重要).现在,使用Internet Explorer 8,我们注意到如果您输入的内容看起来像一个网址:

www.google.com

... IE通过一些本机到浏览器功能帮助将其转换为链接.现在,如果你真的想把它变成一个链接,并选择编辑链接属性,并将href设置为

www.google.com/analytics

...然后当javascript设置锚标记的href属性时,链接的文本也会发生变化.期望的结果是:

`<a href="http://www.google.com/analytics">www.google.com</a>`
Run Code Online (Sandbox Code Playgroud)

但实际上是:

`<a href="http://www.google.com/analytics">www.google.com/analytics</a>`
Run Code Online (Sandbox Code Playgroud)

有没有人知道解决这个问题的方法?

更新:仅在Internet Explorer 8和7中观察到此行为.Firefox,Chrome和Safari不受影响.这个问题也可以在TinyMCE网站http://tinymce.moxiecode.com/examples/full.php上观察到,所以它可能不是TinyMCE配置问题.

Man*_*nne 8

经过一些研究和调试,我发现问题是由Internet Explorer的内置行为引起的.在设置链接的href-property时会发生这种情况,该链接的文本内容似乎是一个URL(根据IE).在这些情况下,IE href会将-attribute 的内容复制到链接文本中.

可能有几种解决方法,但我发现至少这个逻辑有效:

  1. 存储innerHTML到临时变量中,
  2. href像往常一样设置属性
  3. 如果innerHTML已更改,innerHTML则从临时变量中复制原始文件.

这似乎有效,因为更改innerHTML链接不会导致更改href属性.

在tinyMCE中,在advlink插件的functions.js的setAllAttribs()中找到以下行:

setAttrib(elm, 'href', href);
Run Code Online (Sandbox Code Playgroud)

...并用这个怪物替换它:

if(tinyMCE.isMSIE) {
    var tmp = elm.innerHTML;
    setAttrib(elm, 'href', href);
    if(elm.innerHTML != tmp) // optional, but keeps unnecessary innerHTML set:s away
        elm.innerHTML = tmp;
}
else {
    setAttrib(elm, 'href', href);
}
Run Code Online (Sandbox Code Playgroud)

......并且您的链接看起来好像没有动过.我还在tinyMCE论坛上开始讨论这个问题.如果他们对我的解决方案发布了一些改进或者说它是胡说八道,我也会更新这个问题.