jQuery를 사용하여 요소의 모든 특성 가져오기
요소를 조사하여 해당 요소의 모든 속성을 출력하려고 합니다. 예를 들어 태그가 자신에게 알려지지 않은 3개 이상의 속성을 가질 수 있으며 이러한 속성의 이름과 값을 얻어야 합니다.나는 다음과 같은 생각을 하고 있었습니다.
$(this).attr().each(function(index, element) {
var name = $(this).name;
var value = $(this).value;
//Do something with name and value...
});
이것이 가능한지, 가능하다면 정확한 구문은 무엇인지 누가 말해줄 수 있습니까?
그attributes
property는 모두 포함합니다.
$(this).each(function() {
$.each(this.attributes, function() {
// this.attributes is not a plain object, but an array
// of attribute nodes, which contain both the name and value
if(this.specified) {
console.log(this.name, this.value);
}
});
});
당신이 할 수 있는 것은 확장하는 것입니다..attr
이렇게 부를 수 있게 말입니다..attr()
모든 속성의 일반 개체를 얻으려면 다음과 같이 하십시오.
(function(old) {
$.fn.attr = function() {
if(arguments.length === 0) {
if(this.length === 0) {
return null;
}
var obj = {};
$.each(this[0].attributes, function() {
if(this.specified) {
obj[this.name] = this.value;
}
});
return obj;
}
return old.apply(this, arguments);
};
})($.fn.attr);
용도:
var $div = $("<div data-a='1' id='b'>");
$div.attr(); // { "data-a": "1", "id": "b" }
다음은 당신의 것뿐만 아니라 나 자신의 참조를 위해 할 수 있는 많은 방법들에 대한 개요입니다 :) 함수들은 속성 이름들과 그 값들의 해시를 반환합니다.
바닐라 JS:
function getAttributes ( node ) {
var i,
attributeNodes = node.attributes,
length = attributeNodes.length,
attrs = {};
for ( i = 0; i < length; i++ ) attrs[attributeNodes[i].name] = attributeNodes[i].value;
return attrs;
}
바닐라 JS with Array.reduce
ES 5.1(2011)을 지원하는 브라우저에서 작동합니다.IE9+가 필요하고 IE8에서는 작동하지 않습니다.
function getAttributes ( node ) {
var attributeNodeArray = Array.prototype.slice.call( node.attributes );
return attributeNodeArray.reduce( function ( attrs, attribute ) {
attrs[attribute.name] = attribute.value;
return attrs;
}, {} );
}
jQuery
이 함수는 DOM 요소가 아닌 jQuery 개체를 기대합니다.
function getAttributes ( $node ) {
var attrs = {};
$.each( $node[0].attributes, function ( index, attribute ) {
attrs[attribute.name] = attribute.value;
} );
return attrs;
}
밑줄
로다시에도 효과가 있습니다.
function getAttributes ( node ) {
return _.reduce( node.attributes, function ( attrs, attribute ) {
attrs[attribute.name] = attribute.value;
return attrs;
}, {} );
}
로다시
언더스코어 버전보다 더 간결하지만 언더스코어가 아닌 로다시에만 적용됩니다.IE9+가 필요하고 IE8에서 버그가 있습니다.@AlJey에게 영광을 돌립니다.
function getAttributes ( node ) {
return _.transform( node.attributes, function ( attrs, attribute ) {
attrs[attribute.name] = attribute.value;
}, {} );
}
테스트페이지
JS Bin에는 이 모든 기능을 다루는 실시간 테스트 페이지가 있습니다.이 검정에는 부울 특성이 포함됩니다(hidden
) 및 열거된 속성(contenteditable=""
).
디버깅 스크립트(해시체인지에 의한 위 답변에 기초한 jquery solution)
function getAttributes ( $node ) {
$.each( $node[0].attributes, function ( index, attribute ) {
console.log(attribute.name+':'+attribute.value);
} );
}
getAttributes($(this)); // find out what attributes are available
LoDash를 사용하면 간단히 다음과 같은 작업을 수행할 수 있습니다.
_.transform(this.attributes, function (result, item) {
item.specified && (result[item.name] = item.value);
}, {});
javascript 기능을 사용하면 NamedArrayFormat에서 요소의 모든 속성을 쉽게 얻을 수 있습니다.
$("#myTestDiv").click(function(){
var attrs = document.getElementById("myTestDiv").attributes;
$.each(attrs,function(i,elem){
$("#attrs").html( $("#attrs").html()+"<br><b>"+elem.name+"</b>:<i>"+elem.value+"</i>");
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<div id="myTestDiv" ekind="div" etype="text" name="stack">
click This
</div>
<div id="attrs">Attributes are <div>
언더스코어.js에 의한 간단한 솔루션
예를 들어,모든 링크 텍스트 가져오기 부모님의 수업 시간이 있는 사람someClass
_.pluck($('.someClass').find('a'), 'text');
나의 제안:
$.fn.attrs = function (fnc) {
var obj = {};
$.each(this[0].attributes, function() {
if(this.name == 'value') return; // Avoid someone (optional)
if(this.specified) obj[this.name] = this.value;
});
return obj;
}
vara = $(el).attrs ();
여기 당신을 위한 원라이너가 있습니다.
JQuery 사용자:
교체하다$jQueryObject
당신의 jQuery 객체를 사용합니다. 즉,$('div')
.
Object.values($jQueryObject.get(0).attributes).map(attr => console.log(`${attr.name + ' : ' + attr.value}`));
바닐라 자바스크립트 사용자:
교체하다$domElement
HTML DOM 선택기를 사용합니다.document.getElementById('demo')
.
Object.values($domElement.attributes).map(attr => console.log(`${attr.name + ' : ' + attr.value}`));
건배!!
언급URL : https://stackoverflow.com/questions/14645806/get-all-attributes-of-an-element-using-jquery
'source' 카테고리의 다른 글
사용자 정의 워드프레스 테마에 메뉴 지원 추가 (0) | 2023.10.19 |
---|---|
jQuery 확인란이 선택되어 있는지 없는지 확인합니다. (0) | 2023.10.19 |
mysql: /usr/local/lib/libssl.so .1.1: 'OPENSL_1_1_1' 버전을 찾을 수 없습니다(mysql로 required). (0) | 2023.10.19 |
Sequelize.js 외래 키 (0) | 2023.10.19 |
레거시 API를 사용하여 MySQL 쿼리가 성공했는지 확인하는 방법은? (0) | 2023.10.19 |