【问题标题】:Why can't you stringify a jQuery object?为什么不能对 jQuery 对象进行字符串化?
【发布时间】:2014-04-15 01:36:47
【问题描述】:

JSON.stringify( $("p") ); 行导致错误:

InvalidStateError: Failed to read the 'selectionDirection' property from 'HTMLInputElement': The input element's type ('button') does not support selection.

(我使用的是 Google Chrome 34)

为什么?

我应该如何使$("p") 更便携,以便我可以存储它或在消息中传递它?

【问题讨论】:

  • 为什么要对对象进行字符串化?什么目的?您应该将所需的水存储在 json 对象中并将其字符串化,对吗?
  • 为什么要存储 jQuery 选择集的 DOM 元素或首先使其可移植?那些ps 里有什么?
  • 这个问题的实际上下文是什么?很难看出如何在消息中传递 jQuery 选择器的结果。除非你只需要 HTML,否则$('p').html() 不够用吗?
  • @jonS90 使用元素的 ID 怎么样? (如果没有,则设置 UID)
  • @jonS90 if (!$('foo').attr('id')) { $('foo').attr('id', 'uid-' + Math.random()); }

标签: javascript jquery json


【解决方案1】:

HTML 元素涉及大量状态(属性、事件处理程序、与这些相关的代码、内部状态……)。将所有这些序列化为 JSON 是没有意义的。

如果您想以 JSON 格式获取元素的某种表示形式,例如,您可以使用 .html() 来获取表示该元素的 HTML 字符串。或者想出一种格式,例如,只对标签名称、属性和文本进行编码。您可能不得不手动实现(或找到一个库 - “html to json”可能是一个很好的关键字)

【讨论】:

  • 如果他需要p 标签,最好调用outerHMTL 来捕获p 标签本身。
  • @izuriel:是的,这也适用于单个元素。我感觉他实际上可能有多个,在这种情况下,将它们添加到一个虚拟元素并使用 html() 似乎是从中获取 HTML 字符串的最简单方法。
  • HTML 本身不允许我重建 jQuery 对象。我认为表示应该有一个唯一的 ID 或类(我可以从中重建 jQuery 对象),另外还有我需要的任何组件,例如 .html().css() 的东西。这是一个巨大的帮助!
猜你喜欢
  • 2018-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 2021-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多