Py学习  »  Jquery

如何在JavaScript或jQuery中规范HTML?

Julien • 5 年前 • 1909 次点击  

标记可以有多个属性。属性在代码中出现的顺序无关紧要。例如:

<a href="#" title="#">
<a title="#" href="#">

如何在Javascript中“规范化”HTML,使属性的顺序始终相同?我不在乎选择哪种顺序,只要它总是一样的。

:我最初的目标是更容易区分(在JavaScript中)2个略有不同的HTML页面。因为用户可以使用不同的软件来编辑代码,所以属性的顺序可能会改变。这使得diff过于冗长。

回答 :好吧,首先谢谢你的回答。是的,这是可能的。我就是这样做到的。这是一个概念的证明,当然可以优化:

function sort_attributes(a, b) {
  if( a.name == b.name) {
    return 0;
  }

  return (a.name < b.name) ? -1 : 1;
}

$("#original").find('*').each(function() {
  if (this.attributes.length > 1) {
    var attributes = this.attributes;
    var list = [];

    for(var i =0; i < attributes.length; i++) {
      list.push(attributes[i]);
    }

    list.sort(sort_attributes);

    for(var i = 0; i < list.length; i++) {
      this.removeAttribute(list[i].name, list[i].value);
    }

    for(var i = 0; i < list.length; i++) {
      this.setAttribute(list[i].name, list[i].value);
    }
  }
});

$('#different') . 现在 $('#original').html() $('#different').html() 以相同的顺序显示带有属性的HTML代码。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/57275
 
1909 次点击  
文章 [ 8 ]  |  最新文章 5 年前
Nasaralla
Reply   •   1 楼
Nasaralla    13 年前

我认为,如果html内容作为xml传递并通过xslt呈现,实际上是可能的。。。因此,XML中的原始内容可以按照您想要的顺序排列。

Ali
Reply   •   2 楼
Ali    14 年前

这只在某人阅读源代码时才重要,所以对我来说,首先是语义属性,其次是语义属性。。。

当然也有例外,如果您有连续的,所有的都有一个属性,而其他的只有一个属性,那么您可能希望确保共享的都在开始时,后面跟着单独的属性,例如。

<li a=“x”>a</li>
<li a=“y”b=“t”>b</li>
<li a=“z”>C</li>

(即使“b”属性在语义上比“a”更有用)

signedbit
Reply   •   3 楼
signedbit    14 年前

问题是“这有什么必要?” 答:它使代码更可读,更容易理解。

为什么大多数用户界面都很烂。。。许多程序员不理解简化用户工作的必要性。在这种情况下,用户的工作就是阅读和理解代码。 对属性进行排序的一个原因是需要调试和维护代码的人员。程序熟悉的有序列表使他的工作更容易。他可以更快地找到属性,或者意识到哪些属性丢失了,并且可以更快地更改属性值。

Snowhare
Reply   •   4 楼
Snowhare    14 年前

实际上,我可以想出几个好的理由。一个是身份匹配的比较,另一个是与“diff”类型的工具一起使用的比较,在这种情况下,语义上等价的行可以标记为“different”是很烦人的。

真正的问题是“为什么用Javascript”?

这个问题的“味道”是“我有问题,我想我有答案……但我的答案也有问题。”

如果手术室能解释 为什么?

tsurahman
Reply   •   5 楼
tsurahman    14 年前

您可以尝试在firebug中打开HTML选项卡,这些属性的顺序总是相同的

Julien
Reply   •   6 楼
Julien    14 年前

这是一个概念的证明,当然可以优化:

function sort_attributes(a, b) {
  if( a.name == b.name) {
    return 0;
  }

  return (a.name < b.name) ? -1 : 1;
 }

$("#original").find('*').each(function() {
  if (this.attributes.length > 1) {
    var attributes = this.attributes;
    var list = [];

    for(var i =0; i < attributes.length; i++) {
      list.push(attributes[i]);
    }

     list.sort(sort_attributes);

    for(var i = 0; i < list.length; i++) {
      this.removeAttribute(list[i].name, list[i].value);
    }

     for(var i = 0; i < list.length; i++) {
       this.setAttribute(list[i].name, list[i].value);
    }
  }
 });

diff的第二个元素$('#different')也是这样。现在$('#original').html()和$('#different').html()显示具有相同顺序属性的html代码。

Kim Bruning
Reply   •   7 楼
Kim Bruning    14 年前

这是使事情正常化的一般方法。(解析非规范化数据,然后以规范化的形式将其写回)。

我不知道你为什么要规范化HTML,但你已经知道了。数据就是数据。;-)

Tung Nguyen
Reply   •   8 楼
Tung Nguyen    14 年前

JavaScript实际上看不到基于文本的HTML形式的web页面,而是一个称为DOM的树结构,或者文档对象模型。DOM中HTML元素属性的顺序没有定义(事实上,作为Svend注释,它们甚至都不是DOM的一部分),因此在JavaScript运行时对它们进行排序的想法无关紧要。

我只能猜测你想达到什么目的。如果您尝试这样做是为了提高JavaScript/页面性能,那么大多数HTML文档呈现器可能已经在优化属性访问方面付出了很多努力,因此在这方面几乎没有什么收获。

如果您试图对属性进行排序,以使通过网络发送的页面的gzip压缩更加有效,请理解JavaScript在该时间点之后运行。相反,您可能想看看运行服务器端的东西,尽管这可能比它的价值更麻烦。