5.4 内容 setter 和 getter 方法

如果能够对突出引用稍作修改,去掉一些文本并代之以省略号,那么效果会更好。为此,我们在例子文本中已经将某些文本包装在了<span class="drop">元素中。

实现这种替换的最简便方式,就是直接用新的HTML代替旧的内容。此时,就要用到.html()方法了,参见代码清单5-19。

代码清单5-19

  1. $(document).ready(function() {
  2. $('span.pull-quote').each(function(index) {
  3. var $parentParagraph = $(this).parent('p');
  4. $parentParagraph.css('position', 'relative');
  5.  
  6. var $clonedCopy = $(this).clone();
  7. $clonedCopy
  8. .addClass('pulled')
  9. .find('span.drop')
  10. .html('…')
  11. .end()
  12. .prependTo($parentParagraph);
  13. });
  14. });

代码清单5-19中新增的几行代码使用了我们在第2章讨论过的DOM遍历技术。首先,使用.find()方法找到<span class="drop">元素,对这些元素进行操作,然后通过调用.end()方法重新返回<span class="drop">元素集合。在此期间,我们调用.html()把相应的内容改成了省略号(使用的是相应的HTML实体)。

在调用.html()而不传递参数的情况下,这个方法返回匹配的元素中的HTML标记。而传入参数后,元素的内容将被传入的HTML替换掉。在此要注意传入的HTML必须是有效的,而且要对特殊字符进行转义。

这样,引用中的特定文本就被替换成了省略号,如图5-11所示。

5.4 内容 setter 和 getter 方法 - 图1

图 5-11

引用一般不会使用原来的字体样式,例如one more side的粗体。换句话说,我们真正想在引用中显示的是去掉了<span class="pull-qoute">中的<strong><em><a href>及其他行内标签之后的文本。要想去掉这些HTML标签,就得使用.html()方法的“伙伴”.text()方法了。

.html()方法类似,.text()也可以取得匹配元素的内容,或者用新字符串替换匹配元素的内容。但是,与.html()不同的是,.text()始终会取得或设置纯文本内容。在使用.text()取得内容时,所有HTML标签都将被忽略,而所有HTML实体也会被转换成对应的字符。而在通过它设置内容时,诸如<这样的特殊字符,都会被转换成等价的HTML实体,如代码清单5-20所示。

代码清单5-20

  1. $(document).ready(function() {
  2. $('span.pull-quote').each(function(index) {
  3. var $parentParagraph = $(this).parent('p');
  4. $parentParagraph.css('position', 'relative');
  5. var $clonedCopy = $(this).clone();
  6. $clonedCopy
  7. .addClass('pulled')
  8. .find('span.drop')
  9. .html('…')
  10. .end()
  11. .text($clonedCopy.text())
  12. .prependTo($parentParagraph);
  13. });
  14. });

在使用以上代码取得引用的内容时,我们得到的是纯文本,没有任何标签。因此在将这些文本重新传入.text()时,就没有标记、粗体文本了,如图5-12所示。

5.4 内容 setter 和 getter 方法 - 图2

图 5-12