如何从html属性值中删除字符?

时间:2013-10-10 21:17:12

标签: javascript html

根据htmlcompressor.com的作者,由于它们具有语义含义,因此无法完成。

以下是具体示例:

<meta name='description' content='Foo lets you save and share all your 
  web bookmarks / favorites in one place. It is free with no advertising for life, and 
  has straight forward privacy controls.'>

删除你拥有的返回字符:

<meta name='description' content='Foo lets you save and share all your web bookmarks / favorites in one place. It is free with no advertising for life, and has straight forward privacy controls.'>

这是我要发送到浏览器的单行。

我想使用一些字符串操作为我的所有HTML执行此操作。这是可能做的还是其他情况下返回字符有意义?有没有办法区分?

2 个答案:

答案 0 :(得分:2)

根据HTML4.01规范(http://www.w3.org/TR/html4/struct/global.html#h-7.4.4.2),content=""元素的<meta />属性为CDATA,这意味着空格不重要:

  

CDATA是文档字符集中的一系列字符,可能包含字符实体。用户代理应解释属性值,如下所示:

     
      
  • 用字符替换字符实体
  •   
  • 忽略换行,
  •   
  • 用一个空格替换每个回车或标签。
  •   
  • 用户代理可以忽略CDATA属性值中的前导和尾随空格(例如,“myval”可以被解释为“myval”)。作者不应声明带有前导或尾随空格的属性值。
  •   

所以看起来htmlcompression的作者是错误的。

无论如何,despite dire warnings to the contrary,您可能会使用正则表达式来解决此问题。

我已经忘记了在正则表达式中组合“仅匹配此组,并在此子区域中替换”的语法,但这个hack有效:

这个简单的正则表达式将捕获content=""属性的内容:

<meta.+content='(.*)'>

获得内容后,您可以直接'\r', '\n', ' ' -> ' '替换。

答案 1 :(得分:0)

每当关于内容属性为CDATA的规范是正确的时,网站管理员可以通过JavaScript使用任何属性的值,例如给定示例中“meta”标记的“content”,并且压缩属性的值将会改变预期的结果。

所以htmlcompressor.com的作者是正确的,因为它们具有压缩目的的语义含义。

<meta id="m1" name="item1" content="Sample stuff:

  1. This text is multiline on purpose.
  2. And the author expects it to remain this way after compression.

  So yes, it does matter...">

压缩了相同的元标记:

<meta id="m2" name="item2" content="Sample stuff: 1. This text is multiline on purpose. 2. And the author expects it to remain this way after compression. So yes, it does matter...">

并显示差异:

<script>
  alert('"'
      + document.getElementById('m1').content
      + '"\n\n---------------\n\n"'
      + document.getElementById('m2').content + '"'
  );
</script>

Afaik,该网站的目标是在不改变最终布局或功能的情况下压缩文档。

实例:http://jsfiddle.net/7Qb74/