자식이 필요한 요소를 채우기 위해 JavaScript를 사용할 때 유효한 XHTML 1.0 엄격한 코드를 어떻게 작성합니까?
-
02-07-2019 - |
문제
W3C의 유효성 검사기를 통해 내 사이트를 XHTML 1.0 엄격하게 검증하려고 노력하고 있으며 특히 끈적 끈적한 (적어도 내 경험에서) 검증 오류로 내려갔습니다. 저는 사이트에 다양한 서비스의 특정 배지를 포함하여 자체 API와 외부 사이트에 포함시키기위한 코드를 제공합니다. 이 배지는 JavaScript (대부분)를 사용하여 자식이 필요한 마크 업에 삽입하는 요소를 채 웁니다. 이것은 결국 완벽하게 유효한 마크 업이 생성되었지만 유효성 검사기에게는 불완전한 부모-자녀 태그가있는 모든 것이 오류를 던진다는 것을 의미합니다.
경고로서, 나는 배지가 검증되지 않는 서비스에 불만을 제기 할 수 있다는 것을 이해합니다. SANS 이것으로, 나는 누군가가 이와 같은 배지를 포함하는 동안 코드를 검증했다고 가정합니다. 그것이 내가 관심있는 것입니다. '그들의 배지에 대해 Flickr에 불평하는 것'과 같은 답은 저를 많이 도울 수 없습니다.
추가 경고 : 나는 가능한 한 마크 업이 남아있는 것을 선호합니다. 즉, 빈 Li 태그 또는 tr-td 쌍을 추가하여 검증을 위해 탐탁지 않은 해결책이 필요할 수도 있습니다. 그것이 유일한 방법이라면, 확인을 위해 만들 수있는 유일한 방법이라면, 오,하지만 시맨틱 마크 업에 대한 답변을 기대하십시오.
예로서:
<div id="twitter_div">
<h2><a href="http://twitter.com/stopsineman">@Twitter</a></h2>
<ul id="twitter_update_list">
<script type="text/javascript" src="http://twitter.com/javascripts/blogger.js"></script>
<script type="text/javascript" src="http://twitter.com/statuses/user_timeline/stopsineman.json?callback=twitterCallback2&count=1"></script>
</ul>
</div>
JavaScript를 감싸는 UL 태그에 주목하십시오. 이것은 결국 스크립트를 통해 LIS로 채워 지지만 유효성 검사기에는 인구가없는 UL 만 볼 수 있습니다.
미리 감사드립니다!
해결책
다음 조각은 유효한 XHTML이며 작업을 수행합니다.
<div id="twitter_div">
<h2 class="twitter-title"><a href="http://twitter.com/stopsineman" title="Tim's Twitter Page.">Twitter Updates</a></h2>
<div id="myDiv" />
</div>
<script type="text/javascript">
var placeHolderNode = document.getElementById("myDiv");
var parentNode = placeHolderNode.parentNode;
var insertedNode = document.createElement("ul");
insertedNode .setAttribute("id", "twitter_update_list");
parentNode.insertBefore( insertedNode, placeHolderNode);
parentNode.remove(placeHolderNode);
</script>
<script type="text/javascript" src="http://twitter.com/javascripts/blogger.js"></script>
<script type="text/javascript" src="http://twitter.com/statuses/user_timeline/stopsineman.json?callback=twitterCallback2&count=5"></script>
다른 팁
아마도 JavaScript를 사용하여 초기 배지 HTML을 작성할 수 있습니까? JavaScript를 채울 수있는 경우 배지 코드가 문서에 삽입되기를 원할 것입니다.
다양한 배지에 대한 JavaScript 전에 문서 작성이 발생하는지 확인하면됩니다.
유효하지 않은 코드가있는 페이지에 대한 HTML / 링크의 특정 예를 제공 할 수 있습니까?
솔루션은 각 배지마다 다를 수 있습니다. 트위터의 경우 자신의 콜백 기능 만 작성할 수 있습니다. 다음은 배지 코드를 기반으로 한 예입니다.
<div id="twitter_div">
<h2><a href="http://twitter.com/stopsineman">@Twitter</a></h2>
<div id="twitter_update_list"></div>
</div>
<script type="text/javascript">
function updateTwitterCallback(obj)
{
var twitters = obj;
var statusHTML = "";
var username = "";
for (var i = 0; i < twitters.length; i++)
{
username = twitters[i].user.screen_name;
statusHTML += ('<li><span>' + twitters[i].text + '</span> <a style="font-size:85%" href="http://twitter.com/' + username + '/statuses/' + twitters[i].id + '">' + relative_time(twitters[i].created_at) + '</a></li>');
}
document.getElementById('twitter_update_list').innerHTML = '<ul>' + statusHTML + '</ul>';
}
</script>
<script type="text/javascript" src="http://twitter.com/javascripts/blogger.js"></script>
<script type="text/javascript" src="http://twitter.com/statuses/user_timeline/stopsineman.json?callback=updateTwitterCallback&count=1"></script>
나는 au003Cli> "디스플레이 : 없음"으로u003Cul> 꼬리표:
<ul id="twitter_update_list"><li style="display:none;">A</li></ul>
<script type="text/javascript" src="http://twitter.com/javascripts/blogger.js"></script>
<script type="text/javascript" src="http://twitter.com/statuses/user_timeline/01241.json?callback=twitterCallback2&count=1"></script>
이것은 스크립트를 방해하지 않으며이 경우 작동하지 않으며, 나는 그것이 아니라고 생각합니다.탐탁지 않은 해결책" :)
어느 시점에서 페이지가 유효 해집니다. 그것이 실제로 검증 될 수있는 유일한 시간입니다.
많은 DOM 스크립팅으로 구성된 경우 사소한 페이지가 건설 중 모든 시점에서 유효한 상태로 유지 될지 확신 할 수 없습니다.
이것은이 주제에 대해 가장 인기있는 의견은 아니지만 ...
100% 검증에 대해 걱정하지 마십시오. 그렇게 큰 거래는 아닙니다.
검증의 요점은 마크 업을 가능한 표준으로 만드는 것입니다. 왜요? 사양 (예 : 검증되지 않은 마크 업)을 준수하지 않는 마크 업이 제공되는 브라우저는 자체 오류 검사를 수행하여 사용자에게 보려는 의도 한 모습을 수정하고 페이지를 표시합니다. 브라우저의 품질 오류 확인은 다양합니다. Yadda-Yadda-Yadda는 유효한 마크 업을 사용하는 것이 좋습니다. 그러나 유효성 검사가 실패하는 코드조차 아닙니다! 그 배지를 쓴 사람들은 아마도 여러 브라우저에서 테스트했을 것입니다 (물론 예상대로 작동한다면 똑같이해야합니다).
요컨대, 검증에 대한 상이 없습니다 :)