其实 jQuery 的 text() 是对 value、innerText 的封装,而 html() 是对 innerHTML 的封装。请参见 text()、html()、val() 的差异。
之前我们探讨过这个问题,但是由于里面涉及内容比较多,反而显得很杂,今天就只说取值这个问题。
当一个 div 中有如下字符时,text()、html() 取值效果分别如下:
源代码 |
显示 |
text() |
html() |
>> |
>> |
>> |
>> |
<< |
<< |
<< |
<< |
&& |
&& |
&& |
&& |
<b>b</b> |
b(加粗) |
b |
<b>b</b> |
| | | |
| | | |
| | | |
| | | |
"" |
"" |
"" |
"" |
'' |
'' |
'' |
'' |
text() 可以这样总结:
就是从浏览器看到的样子(加粗这些没办法)。
html() 可以这样总结:
1、>、>、<、<、&、& 取出来就是从浏览器看到的样子进行 HtmlEncode。这里 >、< 指不完整的 HTML 标签,理论上应该是杜绝的,如果排除 >、<、&,实际上取出来就是源码的样子。
2、完整的 HTML 标签、空格、 ,取出来就是源码的样子。
3、"、"、'、',取出来就是从浏览器看到的样子。
头大了,为什么要搞这么复杂呢?
如果不是 div,而是 textarea,则除了 <b>b</b> 那里不一样,其他都一样,其实在 textarea 中直接写 <b> 也是不规范的做法,理念上应该是杜绝的,如果规范写法,实际上取出来就是源码的样子。
源代码 |
显示 |
text() |
html() |
<b>b</b> |
<b>b</b> |
<b>b</b> |
<b>b</b> |