.html()
.html()
描述:获得匹配的元素集合中第一个元素的HTML内容。
该方法不接受任何参数
该方法在XML document中不可用。
在一个HTML document中,.html()
可以用来获得一个元素的内容。如果选择器表达式匹配了不止一个元素,只会返回第一个匹配的元素的html。设想以下代码:
$( "div.demo-container" ).html();
为了检索得后面的<div>
内容,它必须是document中第一个带有class="demo-container"
的div。
<div class="demo-container"> <div class="demo-box">Demonstration Box</div> </div>
结果将如下所示:
<div class="demo-box">Demonstration Box</div>
该方法使用浏览器的innerHTML
属性。有些浏览器可能不能返回一个原始文档中的HTML源的严格复制。举个例子,Internet Explorer有时候会丢失元素属性值周围的引号,如果它们只包含了字母数字的字符。
其它说明
- 根据设计意图,任何接受一段HTML字符串的jQuery构造器或者jQuery方法——包括
jQuery()
、.append()
、.after()
等等——都会潜在地执行代码。这可能发生脚本标签注入,或者使用HTML的元素属性执行代码(例如,<img onload="">
。)千万不要用这些方法来插入从不可信任的来源获得的字符串,比如说URL查询参数、cookies,或者表单输入。这样做还可能引入跨站脚本(XSS)漏洞。在往document添加内容之前要删除或转义一切的用户输入。
示例
点击一个段落文本,把它从html转换成文本。
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>html demo</title> <style> p { margin: 8px; font-size: 20px; color: blue; cursor: pointer; } b { text-decoration: underline; } button { cursor: pointer; } </style> <script src="https://code.jquery.com/jquery-1.10.2.js"></script> </head> <body> <p> <b>Click</b> to change the <span id="tag">html</span> </p> <p> to a <span id="text">text</span> node. </p> <p> This <button name="nada">button</button> does nothing. </p> <script> $( "p" ).click(function() { var htmlString = $( this ).html(); $( this ).text( htmlString ); }); </script> </body> </html>
演示结果
.html()
描述:针对每个匹配的元素设置HTML内容。
- htmlString类型:htmlString一个字符串,被设置为每个匹配的元素的内容。
- function一个函数,返回要设置的内容。检索集合中元素的索引位置以及旧HTML值作为参数。在调用该函数之前,jQuery会清空该元素;使用oldhtml参数以引用以前的内容。在这个函数内部,
this
引用了集合中的当前元素。
.html()
方法在XML document中不可用。
当.html()
用来设置元素的内容时,元素中的任何内容会被新内容彻底取代。另外,在用新内容替换那些元素之前,jQuery会删除别的结构,比如说子元素上的数据以及事件处理函数
设想下面的HTML:
<div class="demo-container"> <div class="demo-box">Demonstration Box</div> </div>
<div class="demo-container">
的内容将被设置为下面:
$( "div.demo-container" ) .html( "<p>All new content. <em>You bet!</em></p>" );
那么代码将替换<div class="demo-container">
内部的一切东西:
<div class="demo-container"> <p>All new content. <em>You bet!</em></p> </div>
自从jQuery 1.4,.html
方法允许通过传入一个函数来设置HTML内容。
$( "div.demo-container" ).html(function() { var emphasis = "<em>" + $( "p" ).length + " paragraphs!</em>"; return "<p>All new content for " + emphasis + "</p>"; });
给定一个带有六个段落文本的document,示例会把<div class="demo-container">
的html设置成<p>All new content for <em>6 paragraphs!</em></p>
。
该方法使用浏览器的innerHTML
属性。有些浏览器可能不能严格复制提供的html源,生成DOM。举个例子,Internet Explorer 8及以前的版本会把所有的链接上的href
属性转换成绝对的URL,而且Internet Explorer 9及以前的版本如果不附加独立的兼容性层,就不能正确地处理HTML 5元素。
<script>
元素不能包含HTML,要想给它设置内容,请使用.text()
方法,而不是.html()
方法。
注意:在Internet Explorer 9以及后的版本,设置一个HTML元素的文本内容,可能破坏它的子元素的文本节点,操作结果是从document中删除了它的子元素。如果你要保持对这些DOM元素的引用,并需要它们不变,请使用.empty().html( string )
来代替.html(string)
,因此这些在新字符串分配到元素之前,会从document中删除这些子元素。
示例
向每个div添加更多的html。
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>html demo</title> <style> .red { color: red; } </style> <script src="https://code.jquery.com/jquery-1.10.2.js"></script> </head> <body> <span>Hello</span> <div></div> <div></div> <div></div> <script> $( "div" ).html( "<span class='red'>Hello <b>Again</b></span>" ); </script> </body> </html>
演示结果
把一些html添加到每个div上,然后立即对插入的html作更多的操纵。
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>html demo</title> <style> div { color: blue; font-size: 18px; } </style> <script src="https://code.jquery.com/jquery-1.10.2.js"></script> </head> <body> <div></div> <div></div> <div></div> <script> $( "div" ).html( "<b>Wow!</b> Such excitement..." ); $( "div b" ) .append( document.createTextNode( "!!!" ) ) .css( "color", "red" ); </script> </body> </html>
演示结果