순환 참조가 있는 경우에도 DOM 노드를 JSON으로 시리얼화하려면 어떻게 해야 합니까?
DOM 노드 또는 전체를 시리얼화하고 싶다.windowJSON에게.
예를 들어 다음과 같습니다.
>> serialize(document)
-> {
"URL": "http://stackoverflow.com/posts/2303713",
"body": {
"aLink": "",
"attributes": [
"getNamedItem": "function getNamedItem() { [native code] }",
...
],
...
"ownerDocument": "#" // recursive link here
},
...
}
JSON.stringify()
JSON.stringify(window) // TypeError: Converting circular structure to JSON
문제는 JSON이 기본적으로 순환 참조를 지원하지 않는다는 것입니다.
var obj = {}
obj.me = obj
JSON.stringify(obj) // TypeError: Converting circular structure to JSON
window및 DOM 노드에는 많은 노드가 있습니다. window === window.window처럼document.body.ownerDocument === document.
또한.JSON.stringify기능을 시리얼화하지 않기 때문에, 이것은 제가 찾고 있는 것이 아닙니다.
dojox.json.ref
`dojox.json.ref.toJson()` can easily serialize object with circular references:
var obj = {}
obj.me = obj
dojox.json.ref.toJson(obj); // {"me":{"$ref":"#"}}
좋아요, 그렇지 않나요?
dojox.json.ref.toJson(window) // Error: Can't serialize DOM nodes
나한테는 좀 모자라.
왜요?
브라우저별로 DOM 호환성 표를 만들려고 합니다.예를 들어 Webkit은 플레이스 홀더 속성을 지원하지만 Opera는 지원하지 않습니다. IE 8은localStorageIE 7은 그렇지 않습니다.
나는 수천 개의 시험 사례를 만들고 싶지 않다.나는 그것들을 모두 테스트할 수 있는 일반적인 방법을 만들고 싶다.
2013년 6월 갱신
저는 NV/dom-dom-dom.com 시제품을 만들었습니다.
http://jsonml.org/는 XHTML DOM 요소를 JSON으로 변환하기 위한 문법을 시도합니다.예를 들면 다음과 같습니다.
<ul>
<li style="color:red">First Item</li>
<li title="Some hover text." style="color:green">Second Item</li>
<li><span class="code-example-third">Third</span> Item</li>
</ul>
된다
["ul",
["li", {"style": "color:red"}, "First Item"],
["li", {"title": "Some hover text.", "style": "color:green"}, "Second Item"],
["li", ["span", {"class": "code-example-third"}, "Third"], " Item" ]
]
아직 사용하지 않았습니다만, Web 페이지를 가져다가, 콧수염.js를 사용해 재템플릿 하고 싶은 프로젝트에 사용할까 생각하고 있습니다.
잠재적으로 DOM을 이동하고 DOM의 순수 JS 객체 표현을 생성한 다음 DojoX 직렬화기에 제공할 수 있습니다.그러나 먼저 DOM 요소, 그 속성 및 텍스트 노드를 JS 개체에 매핑할 방법을 결정해야 합니다.예를 들어, 당신은 다음을 어떻게 표현하겠습니까?
<parent attr1="val1">
Some text
<child attr2="val2"><grandchild/></child>
</parent>
이렇게요?
{
tag: "parent",
attributes: [
{
name: "attr1",
value: "val1"
}
],
children: [
"Some text",
{
tag: "child",
attributes: [
{
name: "attr2",
value: "val2"
}
],
children: [
{ tag: "grandchild" }
]
}
]
}
DojoX가 DOM 시리얼화를 즉시 지원하지 않는 이유는 다음과 같습니다.먼저 DOM을 JS 객체에 매핑하기 위한 스킴을 선택해야 합니다.채용할 수 있는 표준 계획이 있습니까?JS 오브젝트는 기능 없이 단순히 DOM 트리를 모방합니까?우선, 「DOM을 JSON에 직렬화」로부터 무엇을 기대하는지를 정의할 필요가 있다고 생각합니다.
XML 문자열을 JSON으로 변환하려고 할 때 이 기능이 매우 잘 작동했습니다.
XMLObjectifier.xmlToJSON(XMLObjectifier.textToXML(xmlString));
아마 도움이 될 거야
네가 직접 써야 할 것 같아.JSON 시리얼화 데이터는 작업(DOM 호환성 표)에 적합하지 않을 수도 있습니다.오브젝트를 직접 반복하고 속성 유형을 확인하는 등의 작업을 수행해야 합니다.
var functions = [];
var strings = [];
for( var key in window ) {
if( typeof window[key] == 'string' ) {
strings[strings.length] = key;
} else if( typeof window[key] == 'function' ) {
functions[functions.length] = key;
} else if( ... ) { ... }
}
...
언급URL : https://stackoverflow.com/questions/2303713/how-to-serialize-dom-node-to-json-even-if-there-are-circular-references
'programing' 카테고리의 다른 글
| Toad 대체 방법 (0) | 2023.03.06 |
|---|---|
| 스프링 부트 상태가 세부 정보를 표시하지 않음(withDetail info) (0) | 2023.03.06 |
| 스프링 부트 - Environment @Autowired가 Null Pointer를 슬로우합니다.예외. (0) | 2023.03.06 |
| Spring JPA Repository - jsonObject의 연산자 SIMPLE_PROPERTY에는 스칼라 인수가 필요합니다. (0) | 2023.03.06 |
| Mongoose에서 고유한 값을 쿼리하려면 어떻게 해야 합니까? (0) | 2023.03.06 |