ตัวเลือก CSS โดยแอตทริบิวต์สไตล์อินไลน์


114

มีตัวเลือก CSS เพื่อเลือกองค์ประกอบนี้ตามค่าแอตทริบิวต์สไตล์อินไลน์หรือไม่

<div style='display:block'>...</div>

สิ่งที่ต้องการ

div[cssAttribute=cssValue]

คำตอบ:


192

styleแอตทริบิวต์แบบอินไลน์ไม่แตกต่างจากแอตทริบิวต์ HTML อื่น ๆ และสามารถจับคู่กับตัวเลือกแอตทริบิวต์สตริงย่อย:

div[style*="display:block"]

ด้วยเหตุผลนี้ แต่มันเปราะบางมาก ในฐานะที่เป็นตัวเลือกแอตทริบิวต์ไม่สนับสนุนการแสดงออกปกติคุณจะสามารถดำเนินการที่แน่นอน substring การแข่งขันของค่าแอตทริบิวต์ ตัวอย่างเช่นหากคุณมีช่องว่างในค่าแอตทริบิวต์เช่นนี้:

<div style='display: block'>...</div>

จะไม่ตรงกันจนกว่าคุณจะเปลี่ยนตัวเลือกเพื่อให้เหมาะกับพื้นที่ จากนั้นจะหยุดการจับคู่ค่าที่ไม่มีช่องว่างเว้นแต่คุณจะรวมการเรียงสับเปลี่ยนทั้งหมดอาการคลื่นไส้โฆษณา แต่ถ้าคุณกำลังทำงานกับเอกสารที่การประกาศรูปแบบอินไลน์นั้นไม่น่าจะเปลี่ยนแปลงเลยคุณก็ไม่เป็นไร

โปรดทราบว่านี่ไม่ใช่ทั้งหมดที่เลือกองค์ประกอบตามค่าที่ระบุคำนวณหรือใช้จริงตามที่แสดงใน DOM ซึ่งไม่สามารถทำได้ด้วยตัวเลือก CSS


1
แม้ว่าจะจำเป็น แต่ก็แย่เหมือนกันไม่มีวิธีแก้ปัญหาที่แท้จริงสำหรับสิ่งนี้
BoltClock

หากคุณสามารถบอกเราได้ว่าทำไมคุณต้องทำสิ่งนี้เราอาจช่วยได้มากกว่านี้
สึกกร่อน

9
ฉันจะยกตัวอย่างเมื่อสิ่งนี้มีประโยชน์ ฉันกำลังเขียนการทดสอบ Selenium Web Driver และไม่สามารถ / ไม่ต้องการแก้ไขโค้ดจริงในการทดสอบ ฉันจำเป็นต้องระบุการเติมข้อความอัตโนมัติที่เฉพาะเจาะจง (มีหลายอย่างที่ซ่อนอยู่) โดยการแสดงสไตล์เนื่องจากรหัสไม่ได้ระบุรหัสที่ไม่ซ้ำกันหรือโครงสร้างหลัก - พวกเขาจะถูกถ่ายโอนไปยัง <body> ในการเรียกกลับอย่างน่าจะเป็น แต่ใช่มันเปราะบางเหมือนที่คุณชี้ให้เห็น
andersand

2
ฉันพบว่าจำเป็นอย่างยิ่งหากใช้แถบ hte google translate บนหน้าเว็บของคุณเนื่องจากมันเพิ่ม div คงที่ที่ด้านบนของหน้าของเราและการนำทางของเราได้รับการแก้ไขแล้ว เทคนิคนี้ช่วยให้เราสามารถเลื่อนแถบนำทางได้โดยขึ้นอยู่กับว่าแถบแปลภาษามองเห็นได้หรือไม่ แถบแปลภาษามีคลาสคงที่และสิ่งเดียวที่เปลี่ยนแปลงคือรูปแบบการแสดงผล
Jag

3
@andersand: หลังจากมีความคิดเห็นเพียงพอเกี่ยวกับคำตอบของฉันในที่สุดฉันก็สามารถอัปเดตได้ ฉันไม่เคยคิดเกี่ยวกับซีลีเนียมเมื่อเขียนคำตอบเดิมของฉันและฉันยอมรับว่ามันเป็นหนึ่งในกรณีการใช้งานที่โดดเด่นที่สุดสำหรับตัวเลือกแอตทริบิวต์สไตล์อินไลน์
BoltClock

3

ได้แก่ ";" ทำงานได้ดีขึ้นสำหรับฉัน

div[style*="display:block;"] 

4
เนื่องจากแอตทริบิวต์styleต้องตรงกับคุณสมบัติ HTML ทุก
RousseauAlexandre

@RousseauAlexandre เพิ่ม ";" ให้กับตัวเลือกไม่แตกต่างอย่างน้อยเมื่อฉันลองใช้องค์ประกอบด้วย ";" อยู่ในนั้นและไม่อยู่ในตัวเลือก ;ตราบใดที่ตัวอักษรและช่องว่างเหมือนกันก็ไม่จำเป็นที่จะรวม
Maxie Berkmann
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.