2011-08-28 5 views
2

을 IDREF 사용하여 일부 샘플 data.xml 파일을 XML 요소를 해결하기 위해 $categories에있는 가져온 요소가 idref 속성에 의해 참조되는 요소 인 category?어떻게 감안할 때

나는 다음과 같이 마련했습니다

$categories.each(function() { 
    var $category = $data.find('categories > category[id=' + $(this).attr('idref') + ']'); 
}); 

하지만 요소를 수집하는보다 컴팩트 한 방법이 될 줄 알았는데.

답변

2

당신은 idref 속성에서 id selectors를 만들 수 있습니다

var referenced = $.unique($categories.map(function() { 
    var $found = $data.find("#" + $(this).attr("idref")); 
    return ($found.length ? $found[0] : null); 
}).get()); 

위의 코드는 모두 참조 <category> 요소의 고유 한 인스턴스를 포함하는 배열을 구축 map()$.unique()를 사용합니다.

+0

임의의 XML 문서에서이 작업이 가능합니까? – Tomalak

+0

@Tomalak, 나는 모든 잘 구성된 XML 문서들로 잘 작동한다고 확신한다. 나는 간단한 테스트 피들 [여기] (http://jsfiddle.net/fhamidi/f7v2J/)을 만들었고 id selector가 나를 위해 일한다. –

+0

이것은 또한 아주 좋습니다. 물론 id 선택자를 만들 수도 있습니다. 내가 왜 그렇게 생각하지 않았어? ;-) –

1
var $data = $(data); 
var $byId = {}; 

$("*[id]", $data).each(function() { 
    var $this = $(this); 
    $byId[ $this.attr("id") ] = $this; 
}); 

// later... 
$byId["google"].find("name"); // <name>Google</name> 
+0

아, 네가 여기서 한 짓을 좋아해. 모든 idref를 한 번에 해결합니다. 아직 그 길을 택하지 못했습니다. –