เลือกองค์ประกอบที่ฉันได้ตั้งค่าไว้ก่อนหน้านี้ jquery.data();
เช่นเลือกองค์ประกอบทั้งหมดที่มี.data('myAttr')
การตั้งค่าไว้แล้ว
วิธีการแก้
jsfiddle เพื่อ demostrate คือ Fiddle
เลือกองค์ประกอบที่ฉันได้ตั้งค่าไว้ก่อนหน้านี้ jquery.data();
เช่นเลือกองค์ประกอบทั้งหมดที่มี.data('myAttr')
การตั้งค่าไว้แล้ว
วิธีการแก้
jsfiddle เพื่อ demostrate คือ Fiddle
คำตอบ:
คุณสามารถทำได้
$('[data-myAttr!=""]');
สิ่งนี้จะเลือกองค์ประกอบทั้งหมดที่มีแอตทริบิวต์data-myAttr
ซึ่งไม่เท่ากับ '' (ดังนั้นจึงต้องถูกตั้งค่า);
คุณยังสามารถใช้ตัวกรอง ()
$('*').filter(function() {
return $(this).data('myAttr') !== undefined;
});
วิธีที่ง่ายและดีที่สุดในการเลือกคือ:
$('[data-myAttr]')
ข้อมูลมากกว่านี้:
ฉันทดสอบหลายสิ่งหลายอย่าง
การใช้$('[data-myAttr!=""]')
ไม่ได้ผลกับทุกกรณี เนื่องจากองค์ประกอบที่ไม่มีdata-myAttr
ชุดจะมีdata-myAttr
ค่าเท่ากับundefined
และ$('[data-myAttr!=""]')
จะเลือกองค์ประกอบเหล่านั้นด้วยซึ่งไม่ถูกต้อง
คุณสามารถใช้ตัวกรอง () :
var elements = $("*").filter(function() {
return $(this).data("myAttr") !== undefined;
});
$('[data-myAttr]')
เหรอ?
data()
ฟอร์ม getter อ่านdata-
แอตทริบิวต์HTML5 ได้อย่างแท้จริงแต่รูปแบบ setter ไม่สร้างหรืออัปเดต
คุณสามารถใช้ส่วนขยาย jQuery Selector: การสืบค้นข้อมูลองค์ประกอบ
$(':data'); // All elements with data
$(':not(:data)'); // All elements without data
คุณสามารถใช้ JQuery UI ด้วยตัวเลือก: data ()
เลือกองค์ประกอบที่มีข้อมูลเก็บไว้ภายใต้คีย์ที่ระบุ
ตรวจสอบjsfiddle นี้เป็นตัวอย่าง
เพื่อให้องค์ประกอบทั้งหมดตรงกัน.data('myAttr')
คุณสามารถใช้ได้
var matches = $(':data(myAttr)');
สิ่งนี้ควรใช้ได้กับทั้งสององค์ประกอบที่มีdata-
แอตทริบิวต์และองค์ประกอบที่มีข้อมูลจัดเก็บโดยใช้$.data()
เพราะ
ตั้งแต่ jQuery 1.4.3 HTML 5 data- แอตทริบิวต์จะถูกดึงเข้าสู่ออบเจ็กต์ข้อมูลของ jQuery โดยอัตโนมัติ
แต่สิ่งนี้ไม่ได้ผลดีนัก ตรวจสอบjsfiddle นี้และคุณจะเห็นว่าครั้งที่สองที่เรียกตัวเลือกนั้นควรจับคู่ 2 องค์ประกอบและจับคู่เพียงหนึ่งรายการ สาเหตุนี้เกิดจาก "จุดบกพร่อง" ในไลบรารี jquery-ui
ซึ่งนำมาจากไฟล์ jquery-ui หลัก
$.extend( $.expr[ ":" ], {
data: $.expr.createPseudo ?
$.expr.createPseudo(function( dataName ) {
return function( elem ) {
return !!$.data( elem, dataName );
};
}) :
// support: jQuery <1.8
function( elem, i, match ) {
return !!$.data( elem, match[ 3 ] );
}
});
ดังที่คุณเห็นพวกเขากำลังใช้$.data(elem, match)
แทน$(elem).data(match)
ซึ่งทำให้แคชไม่ได้รับการอัปเดตในกรณีที่คุณขอองค์ประกอบที่มีdata-
แอตทริบิวต์ หากองค์ประกอบได้รับการทดสอบสำหรับการdata()
จัดเก็บสิ่งนี้จะทำงานได้ดี แต่หากไม่เป็นเช่นนั้นจะไม่รวมอยู่ในผลลัพธ์ที่ตรงกัน
นี่อาจไม่ใช่ข้อผิดพลาดเลยหากสิ่งที่คุณต้องการคือจับคู่เฉพาะองค์ประกอบกับข้อมูลข้อมูลที่คุณตั้งไว้ แต่ถ้าไม่ใช่คุณจะเหลือสองตัวเลือก
อย่าใช้ jquery-ui และขยาย pseudo-selector ของคุณเอง $(:mydata(myAttr))
$.extend($.expr[":"], {
mydata: $.expr.createPseudo ?
$.expr.createPseudo(function(dataName) {
return function(elem) {
return !!$(elem).data(dataName);
};
}) : function(elem, i, match) {
return !!$(elem).data(match[3]);
}
});
ใช้ jquery-ui กับ:data
pseudoselector และเข้าร่วมผลลัพธ์ของการเลือก[data-myAttr]
เพื่อรวมสิ่งที่อาจถูกข้าม
var matches = $(':data(myAttr)', '[data-myAttr]')
$('[data-myAttr]').each(function() {
var element = $(this);
// Do something with the element
});
เลือกองค์ประกอบที่ฉันได้ตั้งค่าไว้ก่อนหน้านี้jquery.data();
คำถามคือการค้นหาองค์ประกอบทั้งหมดด้วยคีย์เฉพาะไม่ใช่ข้อมูลใด ๆ
ลองใช้ jQuery.data()
$(".myClass").each(function(i){
if( i % 2 == 0 ){
$(this).data("myAttr",i + 1);
}
});
var res = $(".myClass").map(function(i) {
console.log($(this).data("myAttr"));
return $.data(this, "myAttr") !== undefined ? this : null
});
console.log(res);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<div class="myClass">1</div>
<div class="myClass">2</div>
<div class="myClass">3</div>
<div class="myClass">4</div>
<div class="myClass">5</div>
jsfiddle http://jsfiddle.net/xynZA/142/
html
data-*
ชุดแอตทริบิวต์เช่นเดียวกับjQuery.data()
ชุดหรือไม่?
$('[data-myAttr]')