2009-12-14 1 views
1

웹킷 브라우저 (사파리)를 사용 중이므로이 질문은 웹킷에만 해당됩니다.브라우저에서 렌더링 한 후 자바 스크립트 및 CSS가 포함 된 스타일링 XML (HTML이 아님)

사파리를 XML 문서로 렌더링했습니다 (HTML이 아닙니다). 문서의 특정 섹션을 스타일링하기 위해 스타일 시트 (아래 참조)를 문서에 첨부했습니다. 아래의 경우 첫 번째 "thing"요소 내의 텍스트는 자홍색으로 표시됩니다.

정상적으로 작동합니다. 문서가 렌더링 된 후에 그러나 나는 또한 (I 자바 스크립트를 사용하여 가정) 동적으로 스타일의 다양한 요소의을 수정하고 싶습니다.

자바 스크립트를 사용하여 document.getElementsByName ("a"). 항목 (0)을 사용하여 첫 번째 "물건"요소를 캡처 할 수 있습니다.하지만 스타일을 설정하는 방법을 모르겠습니다 (또는 이것이 가능하다면). 이것은 작동하지 않습니다.>document.getElementsByName ("a"). item (0) .style.display = "none";

렌더링 된 브라우저에서 XML 요소의 스타일을 변경하는 방법에 대한 의견이 있으십니까?

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet href="simple.css" type="text/css"?> 
<document xmlns:ab="adfadfafadf"> 
    <thing name="a">stuff</thing> 
    <thing name="b">stuff2</thing> 
</document> 

_

//simple.css________________________________ 
document {margin: 1em; font-family: sans-serif; font-size: 14px;} 
thing[name="a"] {color: magenta;} 

답변

1

내가 document.getElementsByName를 사용하는 최초의 "일"요소를 캡처하는 자바 스크립트를 사용할 수 있습니다 ("A"). 항목 (0)

당신도, 그렇게 할 수 없어야

및 비 WebKit 브라우저에서는 사용할 수 없습니다. getElementsByName은 특별한 의미가있는 name 속성이없는 XML 문서에서 사용할 수없는 DOM 레벨 1 HTML 메소드입니다. (이것은 스키마 유형이 ID 인 속성과 약간 다릅니다.)

style 속성이 임의의 XML 문서의 요소에 존재할 것이라고 합법적으로 기대할 수 있습니까? DOM 레벨 2 스타일 사양이이 ElementCSSInlineStyle 인터페이스에 대해 말하고있다 :

기대는 ElementCSSInlineStyle 인터페이스의 인스턴스는 때 Element 인터페이스의 인스턴스에 바인딩 고유의 캐스팅 방법을 사용하여 얻을 수 있는지

요소는 인라인 CSS 스타일 정보를 지원합니다. [X] HTML과는 달리, CSS를 소개하는 데 사용할 수없는 style 또는 다른 속성이 없기 때문에

나는, 임의의 XML 문서의 요소가 하지 지원 인라인 CSS 스타일 정보를 할 수 있다고 주장 것입니다. Mozilla와 Opera는 WebKit을 제공하지 않는 것에 동의합니다.

그러나 DOM 레벨 2 스타일의 document.styleSheets 인터페이스는 (해당 브라우저 기반에서) 작동해야합니다.예를 들어, 당신은 말해서 thing[name="a"] 규칙을 제거 할 수 있습니다

document.styleSheets[0].deleteRule(1); 

을 말해서 교체를 추가

document.styleSheets[0].insertRule('thing[name="a"] {display: none;}', 1); 
0

이 잘 보이지 않는,하지만 난 웹킷은 당신이 원하는 스타일을 지원하는지 확인하기 위해 W3C spec에있는 링크를 클릭하십시오 것이다. 그렇지 않으면 데이터를 본 후에 서버에서 스타일 시트를 동적으로 요청할 수 있습니다. 그게 유일한 해결 방법 일 수도 있습니다.