可能重复:
Jquery html()和自闭标签
是否期望jQuery $('span').html()将XHTML br标签转换为html语法?
我有这样的文件
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script src="/js/core/jquery.js" type="text/javascript"></script>
</head>
<body>
<div id="content">
<img src="/some/image.gif" />
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我想为一些节点检索html来做某事.但我看到IMG存在一个问题.
$('#content').html();
Run Code Online (Sandbox Code Playgroud)
这将返回无效的XHTML
<img src="/some/image.gif">
Run Code Online (Sandbox Code Playgroud)
jQuery版本是1.4.2.
这是重复的,但原始问题中的答案都没有给出实际的解决方法.(可能是正确的.我不得不同意@Cletus在他的内容中所说的 - 一如既往的优秀 - 答案.)
但是如果你坚持使用XHTML:有一个jQuery插件提供了一个innerXHTML()功能(虽然维护得很差,最近更新了2007,从未通过Beta发布)和一个名为innerXHTML的JavaScript工具,它可以满足您的需求.如果你需要这个,这可能是你最好的选择.
innerHTML/ html()除非您在application/xhtml+xml媒体类型下实际将页面作为XHTML提供,否则不会为您提供XHTML序列化.(这不适用于IE <9.)如果您正在为您的页面提供服务text/html,那么当您将源解析为DOM时,您的自动关闭标签只会被浏览器忽略.您不能指望从您输入的序列化DOM中获取相同格式的HTML.
实际上在IE中的某些情况下innerHTML甚至不会给你一个有效的HTML序列化:它在某些不应该的情况下省略attr周围的引号.简而言之,您不能依赖于innerHTML为您提供任何特定格式的标记.它可能会重新排序属性,它可能会HTML转义不同的字符,它可能会规范化属性值,它可能会改变空格.因此,对html()返回值执行字符串操作是非启动的.所有你可以依靠的是你可以分配序列标记回到innerHTML另一个元素和浏览器就能解析它.
您尝试检索XHTML的目的是什么?您可以使用正常的DOM样式操作来实现更多功能.
ETA评论:
然后XHTML有效性是您最不担心的.如果HTML格式不正确无关紧要,您仍然可以将其写回html().但:
你不能可靠地做的html()是告诉文本内容中的句子和属性值是什么.例如<img title="Hello, this is some description. Another sentence.">是标记,如果你开始把<span>小号里面的title属性,你显然会遇到困难.
这是一个文本处理任务,因此您应该在文本节点上执行此操作,而不是标记.这有点棘手,jQuery没有为您提供任何特殊工具.但是看看这个答案的findText功能,你可以使用它:
// Split each text node into things that look like sentences and wrap
// each in a span.
//
var element= $('#content')[0];
findText(element, /.*?[.?!]\s+?/g, function(node, match) {
var wrap= document.createElement('span');
node.splitText(match.index+match[0].length);
wrap.appendChild(node.splitText(match.index));
node.parentNode.insertBefore(span, node.nextSibling);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1531 次 |
| 最近记录: |