ASP.NET MVC로 응용 프로그램을 작성하고 있습니다. 기존 ASP.NET과 달리 생성 된 페이지에서 모든 ID를 만드는 데 훨씬 더 많은 책임이 있습니다. ASP.NET은 불쾌하지만 고유 한 ID를 제공합니다.
내 문서에서 중복 ID를 확인하기 위해 간단한 jQuery 스크립트를 추가하고 싶습니다. DIVS, 이미지, 체크 박스, 버튼 등의 ID 일 수 있습니다.
<div id="pnlMain"> My main panel </div>
<div id="pnlMain"> Oops we accidentally used the same ID </div>
나는 부주의 한 일을 할 때 나에게 경고 할 세트를 찾고 있고 유형 유틸리티를 잊어 버립니다.
예, 테스트 중에 만 이것을 사용하고 있으며 대안 (예 : 방화 버그 플러그인)도 환영합니다.
답변
다음은 콘솔에 경고를 기록합니다.
// Warning Duplicate IDs
$('[id]').each(function(){
var ids = $('[id="'+this.id+'"]');
if(ids.length>1 && ids[0]==this)
console.warn('Multiple IDs #'+this.id);
});
답변
이 버전은 다소 빠르며 북마크 버튼에 복사하여 북마크릿으로 만들 수 있습니다.
javascript:(function () {
var ids = {};
var found = false;
$('[id]').each(function() {
if (this.id && ids[this.id]) {
found = true;
console.warn('Duplicate ID #'+this.id);
}
ids[this.id] = 1;
});
if (!found) console.log('No duplicate IDs found');
})();
답변
큰 페이지가있어서 스크립트가 너무 느리게 실행되어 완료 할 수 없습니다 (여러 개의 “스크립트 계속”메시지). 이것은 잘 작동합니다.
(function () {
var elms = document.getElementsByTagName("*"), i, len, ids = {}, id;
for (i = 0, len = elms.length; i < len; i += 1) {
id = elms[i].id || null;
if (id) {
ids[id] = ids.hasOwnProperty(id) ? ids[id] +=1 : 0;
}
}
for (id in ids) {
if (ids.hasOwnProperty(id)) {
if (ids[id]) {
console.warn("Multiple IDs #" + id);
}
}
}
}());
답변
HTML Validator (Firefox 확장)를 시도해야합니다 . 페이지에 중복 ID 등이 있음을 분명히 알려줍니다.
답변
HTML의 유효성을 검사하지 않는 이유는 무엇입니까?
이중 ID는 허용되지 않으며 일반적으로 구문 분석 오류가 발생합니다.
답변
중복을 찾는 또 다른 방법이지만 이것은 오류 클래스를 추가하므로 빨간색 텍스트가 표시됩니다.
// waits for document load then highlights any duplicate element id's
$(function(){ highlight_duplicates();});
function highlight_duplicates() {
// add errors when duplicate element id's exist
$('[id]').each(function(){ // iterate all id's on the page
var elements_with_specified_id = $('[id='+this.id+']');
if(elements_with_specified_id.length>1){
elements_with_specified_id.addClass('error');
}
});
// update flash area when warning or errors are present
var number_of_errors = $('.error').length;
if(number_of_errors > 0)
$('#notice').append('<p class="error">The '+number_of_errors+
' items below in Red have identical ids. Please remove one of the items from its associated report!</p>');
}
답변
ES6로 다시 작성된 최상위 jQuery 답변 :
[...document.querySelectorAll('[id]')].forEach(el => {
const dups = document.querySelectorAll(`[id="${el.id}"]`);
if (dups.length > 1 && dups[0] === el) {
console.error(`Duplicate IDs #${el.id}`, ...dups);
}
});