คุณช่วยบอกฉันได้ไหมถ้ามี DOM API ที่ค้นหาองค์ประกอบด้วยชื่อแอตทริบิวต์ที่กำหนดและค่าแอตทริบิวต์:
สิ่งที่ต้องการ:
doc.findElementByAttribute("myAttribute", "aValue");
คุณช่วยบอกฉันได้ไหมถ้ามี DOM API ที่ค้นหาองค์ประกอบด้วยชื่อแอตทริบิวต์ที่กำหนดและค่าแอตทริบิวต์:
สิ่งที่ต้องการ:
doc.findElementByAttribute("myAttribute", "aValue");
คำตอบ:
ปรับปรุง:ในไม่กี่ปีที่ผ่านมาภูมิทัศน์มีการเปลี่ยนแปลงอย่างมาก ตอนนี้คุณสามารถใช้อย่างน่าเชื่อถือquerySelector
และquerySelectorAll
ดูคำตอบของ Wojtekสำหรับวิธีการทำสิ่งนี้
ไม่จำเป็นต้องพึ่งพาการใช้ jQuery หากคุณใช้ jQuery ยอดเยี่ยม ... หากคุณไม่ได้ใช้งานคุณไม่จำเป็นต้องพึ่งมันเพียงเลือกองค์ประกอบตามคุณลักษณะอีกต่อไป
ไม่มีวิธีที่สั้นมากในการทำเช่นนี้ในวานิลลาจาวาสคริปต์ แต่มีวิธีแก้ปัญหาบางอย่าง
คุณทำสิ่งนี้โดยวนลูปผ่านองค์ประกอบต่างๆและตรวจสอบคุณสมบัติ
หากไลบรารีอย่างjQueryเป็นตัวเลือกคุณสามารถทำได้ง่ายขึ้นเช่นนี้
$("[myAttribute=value]")
หากค่านั้นไม่ใช่ตัวระบุ CSS ที่ถูกต้อง(มีช่องว่างหรือเครื่องหมายวรรคตอนอยู่ในนั้น ฯลฯ ) คุณต้องมีเครื่องหมายอัญประกาศรอบค่า (อาจเป็นแบบเดี่ยวหรือคู่):
$("[myAttribute='my value']")
นอกจากนี้คุณยังสามารถทำstart-with
, ends-with
, contains
ฯลฯ ... มีหลายตัวเลือกสำหรับการเลือกแอตทริบิวต์
เบราว์เซอร์สมัยใหม่รองรับ Native querySelectorAll
เพื่อให้คุณสามารถ:
document.querySelectorAll('[data-foo="value"]');
https://developer.mozilla.org/en-US/docs/Web/API/Document.querySelectorAll
รายละเอียดเกี่ยวกับความเข้ากันได้ของเบราว์เซอร์:
คุณสามารถใช้ jQuery เพื่อรองรับเบราว์เซอร์ที่ล้าสมัย (IE9 ขึ้นไป):
$('[data-foo="value"]');
SyntaxError: An invalid or illegal string was specified
'[data-foo="value"]'
เราสามารถใช้ตัวเลือกคุณสมบัติใน DOM โดยใช้document.querySelector()
และdocument.querySelectorAll()
วิธีการ
สำหรับคุณ:
document.querySelector("selector[myAttribute='aValue']");
และโดยการใช้querySlectorAll()
:
document.querySelectorAll("selector[myAttribute='aValue']");
ในquerySelector()
และquerySelectorAll()
วิธีการที่เราสามารถเลือกวัตถุที่เราเลือกใน "CSS"
เพิ่มเติมเกี่ยวกับตัวเลือกแอตทริบิวต์ "CSS" ในhttps://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors
FindByAttributeValue("Attribute-Name", "Attribute-Value");
ป.ล. ถ้าคุณรู้องค์ประกอบประเภทที่แน่นอนคุณเพิ่มพารามิเตอร์ตัวที่ 3 (เช่นdiv, a, p ...etc...
):
FindByAttributeValue("Attribute-Name", "Attribute-Value", "div");
แต่ในตอนแรกให้นิยามฟังก์ชั่นนี้:
function FindByAttributeValue(attribute, value, element_type) {
element_type = element_type || "*";
var All = document.getElementsByTagName(element_type);
for (var i = 0; i < All.length; i++) {
if (All[i].getAttribute(attribute) == value) { return All[i]; }
}
}
ปรับปรุง PS ตามคำแนะนำความคิดเห็น
document.querySelectorAll('[data-foo="value"]');
ตามที่เสนอโดย @Wojtek Kruszewski บน awnser ที่ยอมรับแล้ว
นี่คือตัวอย่างวิธีค้นหารูปภาพในเอกสารโดย src attribute:
document.querySelectorAll("img[src='https://pbs.twimg.com/profile_images/........jpg']");
คุณสามารถใช้ getAttribute:
var p = document.getElementById("p");
var alignP = p.getAttribute("align");
https://developer.mozilla.org/en-US/docs/Web/API/Element/getAttribute
p
องค์ประกอบโดยไม่ต้องใช้id
หรือทุกอย่างp
ใน DOM (และแอตทริบิวต์การทดสอบ)
ใช้ตัวเลือกคิวรีตัวอย่าง:
document.querySelectorAll(' input[name], [id|=view], [class~=button] ')
input[name]
องค์ประกอบอินพุตพร้อมname
คุณสมบัติ
[id|=view]
view-
องค์ประกอบที่มีรหัสที่ขึ้นต้นด้วย
[class~=button]
องค์ประกอบกับbutton
คลาส