그렇다면 사용자 정의 HTML 속성이 유효한 XHTML이 아니라면 어떻게 될까요?
나는 그것이 어떤 사람들이 그들을 승인하지 않는 이유라는 것을 알고 있지만, 그것이 정말로 중요합니까? JavaScript와 상호 작용하고 서버에서 정보를 저장하고 보낼 때 제공하는 힘이 유효성 검사 문제를 능가한다고 생각합니다. 내가 뭔가를 놓치고 있습니까? "잘못된"HTML의 결과는 무엇입니까? 그리고 사용자 지정 DTD가이를 해결하지 않습니까?
그 결과 w3c는 2 년, 5 년, 10 년 후에 동일한 이름의 속성을 생성합니다. 이제 페이지가 깨졌습니다.
HTML5는 합법적 인 사용자 정의 속성 (예 : data-myattr = "foo")에 대한 데이터 속성 유형을 제공 할 것이므로 지금 사용을 시작하고 향후 이름 충돌로부터 합리적으로 안전 할 수 있습니다.
마지막으로 사용자 정의 논리가 클래스 속성 뒤에있는 합리적이라는 사실을 간과 할 수 있습니다. 일반적으로 스타일 속성으로 간주되지만 실제로는 요소에 사용자 정의 메타 속성을 설정하는 합법적 인 방법입니다. 불행히도 기본적으로 부울 속성으로 제한되어 있기 때문에 HTML5가 데이터 접두사를 추가합니다.
BTW, "기본적으로 부울"은 원칙적으로 의미합니다. 실제로 클래스 이름에 구분자를 사용하여 사용자 지정 값과 특성을 정의하는 것을 막을 수있는 것은 없습니다.
class="document docId.56 permissions.RW"
예, "데이터"를 사용하여 합법적으로 맞춤 속성을 추가 할 수 있습니다.
예를 들면 :
<div id="testDiv" data-myData="just testing"></div>
그런 다음 최신 버전의 jquery를 사용하여 다음과 같은 작업을 수행하십시오.
alert($('#testDiv').data('myData'))
또는 데이터 속성을 설정하려면 :
$('#testDiv').data('myData', 'new custom data')
그리고 jQuery는 거의 모든 브라우저에서 작동하므로 문제가 없어야합니다.)
최신 정보
- data-myData는 자바 스크립트 엔진에 관한 한 일부 브라우저에서 data-mydata로 변환 될 수 있습니다. 소문자로 유지하는 것이 가장 좋습니다.
유효성 검사는 그 자체로 끝이 아니라 실수를 조기에 발견하고 여러 브라우저 유형에서 사용할 때 웹 페이지가 직면 할 수있는 신비한 렌더링 및 동작 문제의 수를 줄이는 데 사용되는 도구입니다.
사용자 정의 속성을 추가해도 지금은 이러한 문제에 영향을주지 않으며 앞으로는 그렇게 할 가능성이 낮지 만 유효성을 검사하지 않기 때문에 페이지 유효성 검사의 출력을 평가하려면 다음을 수행해야합니다. 중요한 유효성 검사 문제와 중요하지 않은 문제 중에서 신중하게 선택하십시오. 페이지를 변경하고 재 검증 할 때마다이 작업을 반복해야합니다. 페이지의 유효성이 완전히 확인되면 멋진 녹색 PASS 메시지가 표시되고 테스트의 다음 단계 또는 수행해야하는 다음 변경으로 이동할 수 있습니다.
나는 사람들이 단순한 사용자 정의 속성을 사용하는 것보다 훨씬 더 나쁘거나 이상한 일을하는 유효성 검사에 집착하는 것을 보았습니다.
<base href="http://example.com/" /><!--[if IE]></base><![endif]-->
제 생각에는 사용자 지정 속성은 실제로 중요하지 않습니다. 다른 말처럼, 향후 표준에 추가되는 속성에주의를 기울이는 것이 좋습니다. 하지만 이제 HTML5에 data- * 속성이 있으므로 저장되었습니다.
정말로 중요한 것은 적절하게 중첩 된 태그와 적절하게 인용 된 속성 값이 있다는 것입니다.
사용자 정의 태그 이름 (머리글, 바닥 글 등과 같이 HTML5에서 도입 된 이름)도 사용하지만 이러한 이름은 IE에서 문제가 있습니다.
그건 그렇고, 나는 종종 이러한 모든 유효성 검사 열광자가 iframe 업로드와 같은 Google의 영리한 트릭 앞에 어떻게 굴복하는지 아이러니하게 발견합니다.
사용자 지정 속성을 사용하는 대신 JSON을 사용하여 HTML 요소를 속성과 연결할 수 있습니다.
var customAttributes = { 'Id1': { 'custAttrib1': '', ... }, ... };
결과에 대해서는 SpliFF의 답변을 참조하십시오 .
클래스 속성에 여러 값을 저장하는 것은 올바른 코드 캡슐화가 아니며 복잡한 작업을 수행하는 방법입니다. 예를 들어 jquery를 사용하는 사용자 지정 광고 회 전자를 사용하십시오. 할 페이지가 훨씬 깨끗합니다.
<div class="left blue imagerotator" AdsImagesDir="images/ads/" startWithImage="0" endWithImage="10" rotatorTimerSeconds="3" />
여기에서 간단한 jquery 코드가 작업을 수행하도록합니다. 이제 모든 개발자 또는 웹 디자이너가 광고 로테이터에서 작업하고 별다른 노력없이 요청을 받으면 값을 변경할 수 있습니다.
1 년 후 프로젝트로 돌아 오거나 이전 개발자가 분리되어 태평양 어딘가에있는 섬으로 갔던 새로운 프로젝트로 돌아 오는 것은 코드가 다음과 같이 명확하지 않은 암호화 방식으로 작성 될 때 의도를 알아 내려는 지옥이 될 수 있습니다.
<div class="left blue imagerotator dir:images-ads endwith:10 t:3 tf:yes" />
C # 및 기타 언어로 코드를 작성할 때 모든 사용자 지정 속성을 공백으로 구분 된 문자열로 하나의 속성에 넣는 코드를 작성하지 않고 액세스하거나 쓸 때마다 해당 문자열을 구문 분석해야합니다. 여러분의 코드에서 작업 할 다음 사람에 대해 생각해보십시오.
유효성 검사가 필요한 것은 오늘은 중요하지 않을 수 있지만 내일 문제가 될지 여부를 알 수 없다는 것입니다 (머피의 법칙에 따라 내일 중요 할 것입니다).
미래를 대비 한 대안을 선택하는 것이 좋습니다. 존재하지 않는 경우 ( 이 특정 경우에 해당 ) 이동 방법은 미래 증명 대안을 발명하는 것입니다.
사용자 지정 속성을 사용하는 것은 무해 할 수 있지만, 여전히 해를 끼치 지 않을 것이라고 생각하기 때문에 잠재적으로 해로운 솔루션을 선택하는 이유는 무엇입니까? 미래 증명 대안이 너무 비싸거나 다루기 힘들다면 이에 대해 더 논의 할 가치가있을 수 있지만, 확실히 그렇지 않습니다.
그러나 그럼에도 불구하고 오래된 논의; 제 생각에는 html은 프로그래밍 언어가 아닌 마크 업이기 때문에 항상 마크 업 '오류'에 대해 관대하게 해석되어야합니다. 브라우저는 완벽하게 그렇게 할 수 있습니다. 나는 이것이 앞으로도 변할 것이라고 생각하지 않는다. 따라서 유일하게 중요한 실용적인 기준은 대부분의 브라우저에서 HTML이 올바르게 표시되고 몇 년 안에 계속 표시된다는 것입니다. 그 시간이 지나면 html은 아마 다시 디자인 될 것입니다.
내 재료를 믹스에 추가하기 위해 자동화 도구를 사용하여 후 처리 할 수있는 / 후 처리 할 수있는 콘텐츠를 만들어야 할 때 유효성 검사도 중요합니다. 콘텐츠가 유효하면 마크 업을 한 형식에서 다른 형식으로 훨씬 쉽게 변환 할 수 있습니다. 예를 들어, 특정 스키마를 사용하여 유효한 XHTML을 XML로 수행하는 것은 사용자가 알고 있고 예측 가능한 형식을 따르는 지 확인할 수있는 데이터를 구문 분석 할 때 훨씬 쉽습니다.
예를 들어 다양한 작업을 위해 XML로 변환 된 후 데이터 손실이나 예상치 못한 렌더링 결과없이 다시 변환되기 때문에 콘텐츠가 유효한 XHTML이어야합니다.
클라이언트 / 보스 / 등에 따라 다릅니다. 그들은 XHTML을 확인해야합니까?
어떤 사람들은 많은 해결 방법이 있다고 말하며 장면에 따라 훌륭하게 작동 할 수 있습니다. 여기에는 클래스 추가, rel
속성 활용 및 HTML 주석에서 JSON을 추출하기 위해 자체 파서를 작성한 사람 이 포함됩니다 .
HTML5는이를 수행하는 표준 방법을 제공하며 사용자 지정 속성에 "data-"를 접두사로 붙입니다. 어쨌든 표준 XHTML에서 트랙 아래로 사용될 속성을 사용할 수 있으므로 지금이 작업을 수행하는 것이 좋습니다.
비표준 HTML을 사용하면 브라우저가 "특별한 모드"로 페이지를 렌더링 할 수 있습니다.이 경우 페이지의 다른 부분이 다르게 렌더링 될 수 있고 위치와 같은 다른 것들이 약간 다를 수 있습니다. 그러나 사용자 지정 DTD를 사용하면이 문제를 해결할 수 있습니다.
표준이 아니기 때문에 현재도 미래에도 어떤 일이 일어날 지 전혀 모릅니다. 다른 사람들이 W3C가 앞으로 동일한 이름을 사용하기 시작할 것이라고 말했듯이. 그러나 더 위험한 것은 "브라우저 xxx"의 개발자들이 그들이 만났을 때 무엇을했는지 모른다는 것입니다.
어쩌면 페이지가 어쩌면 페이지에 렌더링하지 않습니다 쿼크 모드로 렌더링되는 모든 일부 모호한 모바일 브라우저에, 어쩌면 브라우저는 아마도 바이러스 킬러 페이지, 등, 등, 등에 질식 것, 메모리 누수가됩니다
I know that following the standards religiously might seem like snobbery. However once you have experienced problems due to not following them, you tend to stop thinking like that. However, then it's mostly too late, and you need to start your application from scratch with a different framework...
I think developers validate just to validate, but there is something to be said for the fact that it keeps markup clean. However, because every (exaggeration warning!) browser displays everything differently there really is no standard. We try to follow standards because it makes us feel like we at least have some direction. Some people argue that keeping code standard will prevent issues and conflicts in the future. My opinion: Screw that nobody implements standards correctly and fully today anyway, might as well assume all your code will fail eventually. If it works it works, use it, unless its messy or your just trying to ignore standards to stick it to W3C or something. I think its important to remember that standards are implemented very slowly, has the web changed all that much in 5 years. I'm sure anyone will have years of notice when they need to fix a potential conflict. No reason to plan for compatibility of standards in the future when you can't even rely on today's standards.
Oh I almost forgot, if your code doesn't validate 10 baby kittens will die. Are you a kitten killer?
Jquery .html(markup) doesn't work if markup is invalid.
Validation
You shouldn't need custom attributes to provide validation. A better approach would be to add validation based on fields actual task.
Assign meaning by using classes. I have classnames like:
date
(Dates)zip
(Zip code)area
(Areas)ssn
(Social security number)
Example markup:
<input class="date" name="date" value="2011-08-09" />
Example javascript (with jQuery):
$('.date').validate(); // use your custom function/framework etc here.
If you need special validators for a certain or scenario you just invent new classes (or use selectors) for your special case:
Example for checking if two passwords match:
<input id="password" />
<input id="password-confirm" />
if($('#password').val() != $('#password-confirm').val())
{
// do something if the passwords don't match
}
(This approach works quite seamless with both jQuery validation and the mvc .net framework and probably others too)
Bonus: You can assign multiple classes separated with a space class="ssn custom-one custom-two"
Sending information "from and to the server"
If you need to pass data back, use <input type="hidden" />
. They work out of the box.
(Make sure you don't pass any sensitive data with hidden inputs since they can be modified by the user with almost no effort at all)
참고URL : https://stackoverflow.com/questions/994856/so-what-if-custom-html-attributes-arent-valid-xhtml
'development' 카테고리의 다른 글
PHP에서 PDF 편집? (0) | 2020.10.12 |
---|---|
SQL Server에서 쿼리의 텍스트를 어떻게 연결합니까? (0) | 2020.10.12 |
JSON.stringify ()의 출력에서 특정 값 숨기기 (0) | 2020.10.12 |
Bash 스크립트에서 오류 발생 (0) | 2020.10.12 |
명령 줄 도구 bash (git)가 작동하지 않음-macOS Sierra 최종 릴리스 후보 (0) | 2020.10.12 |