Firefox添加了

编辑:由于ajax调用,这不会发生。 我改变它以使用来自TinyMCE组件的值来获得乐趣,我得到同样的东西。

content = tinyMCE.get('cComponent').getContent(); //content at this point is 

test

valueToDisplay = content;

如果我做:

 jQuery(selector).html(valueToDisplay); 

我明白了:

 

test


有没有人在使用Firefox 3.6.10和jQuery 1.4.2之前见过这个,我试图使用jQuery ajax调用的结果更改链接文本。

我得到了ajax调用的预期结果:

 function getValueToDisplay(fieldType){ var returnValue; jQuery.ajax({ type: "GET", url: "index.cfm", async:false, data: "fieldtype="+fieldType, success:function(response){ returnValue = response; } }); return returnValue; } 

如果我在此时检查值,我会得到预期值

 console.log(returnValue) //output this --> 

Passport Photo

但是,当我使用jQuery(选择器).html将其插入现有锚点时

我明白了:

 

Passport Photo

我一直在试图找出添加xmlns锚的位置,但不能将其缩小到任何特定的范围。

编辑:我已经尝试在ajax调用中强制dataType:“html”…没有变化。

您的选择器表示某个标签中的内容。

您问题的最小版本将是:

HTML:

  

JS:

 $('#test').html('

test

');

结果:

 

test

改变一切,这样你就不会在标签中加入p标签,或者执行以下操作:

 $('#test').empty().append('

test

');

我想扩展答案,为什么会发生,并提供一个解决方法。 做一个GreaseMonkey脚本我试图改变一个元素的内容,可能不会改变本身但添加更多的元素,因为标签内部只有一个IMG。

原版的:

  

我试图做的是插入一个DIV元素,它将包装已经IMG和另一个新的SPAN第二个孩子,所以目标是最终得到这个:

 
text

使用innerHTML属性,它将是这样的:

 ANode.innerHTML = '
' + ANode.innerHTML + 'text
';

但我得到了:

  

虽然没有真正的解释,但在这里查看答案确实有所帮助。 过了一会儿,我注意到问题中的例子没有发生的事情,现在我认为这是这个问题的关键。 我和jfrobishow一样思考它在哪里发生,我认为连接ANode.innerHTML有些错误。

在最初的问题上回答将其缩小到发生这种情况的部分,注意到无处不在的包围了IMG和新的SPAN节点,所以这让我好奇,不想要的在DIV元素“构建”之前添加了 。 因此,从原始示例和我的后续解决方法中您可以注意到,当您在Anchor中插入新的BLOCK节点时会发生这种情况,因为DIV和P(原始示例)元素都是BLOCK元素。

(如果你不知道BLOCK的意思是来自元素的显示属性http://www.w3schools.com/cssref/pr_class_display.asp )

显而易见的解决方法是将您要插入的节点类型替换为非块元素,在我的情况下问题是我想要的DIV,但当然这取决于脚本的目标,大多数情况都是在设计上,我放了一个DIV,因为我需要它,所以我修复它将DIV转换成另一个SPAN(这是一个内联元素)但我仍然需要表现得像一个块元素所以把风格,这是什么工作的我:

 ANode.innerHTML = '' + ANode.innerHTML + 'text'; 

所以,显而易见,这个问题不是来自脚本(Javascript for me),而是来自样式(CSS)的东西。 顺便说一句,这发生在Firefox 3.6.18,注意这不会发生在Firefox 5.0上。

问题是将块元素放在锚标记内。 这不是有效的HTML,即使大多数浏览器都会解析它。

您只需要在锚点内使用元素,而不是

发生这种情况是因为在您的声明了一个XML命名空间(xmlns)。 如果xmlns锚没有破坏任何东西,只需将它留在那里。

另外,不要使用async:false ,在成功时调用回调函数。

编辑:实际上,只是修复了该特定值的问题……它开始发生在以前的其他值上。

不知怎的,这解决了这个问题。

 jQuery(selector).html(valueToDisplay) 

 jQuery(selector).html( function(index, oldHtml) { return valueToDisplay; } ); 

根据文档,如果我读得正确它应该做同样的事情,因为我没有在函数中使用oldHtml。 ( http://api.jquery.com/html/ )。

从doc:“jQuery在调用函数之前清空元素;使用oldhtml参数引用之前的内容。”

尝试将ajax调用中的dataType更改为"text"

使用.append()而不是.html()修复了我的问题。 今天没见过这个。 为什么要添加额外的xmlns? 我尝试将我的dataType更改为“text”,但它不起作用。 它确实搞乱了我的CSS样式,但使用.append()完全解决了这个问题。 谢谢!

更新 :我需要用.ajax()查询的结果完全替换我的div的内容。 .append()本身是不够的,因为它只会添加到内容中,所以我找到了另一种解决方法:

先清除div:

 $("#myDiv").html(""); 

然后,使用.append()附加内容:

 $("#myDiv").append("My content"); 

它并不完美,但它确实有效。