Chrome에서만 jQuery find(selector)
($.parseXML()
)을 사용하여 예상 한 결과를 얻지 못하고 있습니다. IE 11 또는 Firefox이 실행XML 결과에 대한 Chrome의 jQuery 찾기()가 잘못되었습니다.
<!DOCTYPE html>
<html>
<head>
<script src="https://code.jquery.com/jquery-3.2.1.js"></script>
</head>
<body>
<script>
$(function()
{
var xml =
'<?xml version="1.0"?>' +
'<DataSet>' +
' <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">' +
' <xs:element>' +
' </xs:element>' +
' </xs:schema>' +
'</DataSet>'
;
var xmlDoc = $.parseXML(xml)
var $docElm = $(xmlDoc.documentElement);
alert("> find('xs\\:schema').length=" + $docElm.find('> xs\\:schema').length);
alert("find('xs\\:schema').length=" + $docElm.find('xs\\:schema').length);
alert("> find('xs\\:schema').find('> xs\\:element').length=" + $docElm.find('> xs\\:schema').find('> xs\\:element').length);
alert("> find('xs\\:schema').find('xs\\:element').length=" + $docElm.find('> xs\\:schema').find('xs\\:element').length);
});
</script>
</body>
</html>
내가 기대되는 네 개의 쿼리의 각각에 대해 1 요소 일치를보고
는 훨씬 단순화 코드 (https://jsfiddle.net/a504caa0/) 다음과 같은 고려하십시오.
그러나 Chrome (57.0.2987.133) 쿼리 1 & 3 반환 요소 1 개를 반환하지만 쿼리 2 & 4 반환 요소 0 개를 반환합니다.
$xml.find('selector')
일치하는 항목을 찾지 못하는 동안
$xml.find('> selector')
이 일치하는 항목을 찾는이는 것을 의미한다. 다시 말해, 직접적인 자식에 대해 질의를하면 요소를 찾는다. 그러나 어떤 자손에 대해서도 질의가 있으면 그것이 없다는 것을 말한다.
이것이 XML 전용 문제인지 여부 또는 xs\\:
네임 스페이스 사용의 필요성이 문제가되는지 여부는 알 수 없습니다.
실생활에서 XML은 더 커지고 깊어졌습니다. 직접적인 어린이뿐만 아니라 모든 자손을 쿼리해야 할 때가 있습니다. 해결책은 위의 검색어를 변경하여 (예 : 복수 find()
을 하나로 합치거나 children()
을 사용하여) 작동해야하며, find()
의 크롬 동작을 일반적으로 >
없이 작동/설명해야합니다.
편집 : 난 그냥 find()
에서 모든 XML에서 xs:
및 xs\\:
을 제거했는데, 과연 지금 크롬에서 한 요소를 반환합니다. 그래서 이것은 find()
문제의 XML 네임 스페이스 인 것 같습니다. 물론, 나는 실생활에서 그것을 할 수 없다. Chrome이 네임 스페이스 접두어가있는 직접적인 자식을 찾을 수는 있지만 일반적인 강하가 관련된 경우는 찾을 수없는 것 같습니다. 허용 가능한 해결 방법이 있습니까?
FWIW 'xs'가 유일한 네임 스페이스 인 경우 'find'에 지정할 필요가 없습니다. – wOxxOm
그러나 예제에 따르면''이'xs '가 아닌 기본 네임 스페이스에 있음을 알 수 있습니다. JSFiddle에서 선택자의'xs : \\\'를 제거하면 아무 것도 발견되지 않습니다. –
JonBrave