Firefox添加了
编辑:由于ajax调用,这不会发生。 我改变它以使用来自TinyMCE组件的值来获得乐趣,我得到同样的东西。
content = tinyMCE.get('cComponent').getContent(); //content at this point is test
valueToDisplay = content;
如果我做:
jQuery(selector).html(valueToDisplay);
我明白了:
有没有人在使用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将其插入现有锚点时
我明白了:
我一直在试图找出添加xmlns锚的位置,但不能将其缩小到任何特定的范围。
编辑:我已经尝试在ajax调用中强制dataType:“html”…没有变化。
您的选择器表示某个标签中的内容。
您问题的最小版本将是:
HTML:
JS:
$('#test').html('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");
它并不完美,但它确实有效。