jQuery දත්ත-ගුණාංග අගය මත පදනම් වූ මූලද්‍රව්‍යයක් සොයා ගන්නේ කෙසේද?


1007

මට පහත දැක්වෙන අවස්ථාව තිබේ:

var el = 'li';

<li>පිටුවේ 5 ක් ඇත, එක් එක් data-slide=numberගුණාංගය ඇත (අංකය පිළිවෙලින් 1,2,3,4,5) .

මට දැන් සක්‍රිය විනිවිදක අංකය සොයා ගැනීමට අවශ්‍ය වී ඇති var current = $('ul').data(current);අතර එය එක් එක් විනිවිදක වෙනස්වීම් මත සිතියම් ගත කර යාවත්කාලීන කර ඇත.

මෙතෙක් මා දැරූ උත්සාහයන් අසාර්ථක වී ඇති අතර, වර්තමාන විනිවිදකයට ගැලපෙන තේරීම් කාරකය තැනීමට උත්සාහ කිරීම:

$('ul').find(el+[data-slide=+current+]);

කිසිවක් නොගැලපේ / ආපසු එවන්නේ නැත…

මට liකොටස දෘ c කේත කිරීමට නොහැකි වීමට හේතුව මෙය පරිශීලකයාට ප්‍රවේශ විය හැකි විචල්‍යයක් වන අතර එය අවශ්‍ය නම් වෙනත් මූලද්‍රව්‍යයකට වෙනස් කළ හැකි බැවින් එය සැමවිටම නොවිය හැකිය li.

මට නැතිවූ දේ පිළිබඳ කිසියම් අදහසක් තිබේද?


6
ඔබ .find(el+[data-slide=+current+]);ලියන කේතය ඔබ තුළ ඇති බව ඔබට විශ්වාසද ? එය ඔබට සමහර මිල ගණන් අහිමි පෙනේ"[data-slide]"
xandy

ඒ තෝරා ගැනීමට මට උදව් කළා මොකක්ද සියලු : දත්ත ගුණාංග (නොතකා වටිනාකම) $('*[data-slide]')ඔබ උදා: එය භාවිතා කළ හැකිය$('*[data-slide]').each( function() { ... });
කායි Noack

Answers:


1501

ඔබ අගය එන්නත් කිරීමට ඇති currentවූ බවට ලක්ෂණය සමාන වේ තේරීම්:

$("ul").find(`[data-slide='${current}']`)

පැරණි ජාවාස්ක්‍රිප්ට් පරිසරයන් සඳහා ( ES5 සහ ඊට පෙර):

$("ul").find("[data-slide='" + current + "']"); 

9
Ann ජැනිස්, ඔබට කළ හැකිය $("ul").find(el + "[data-slide='" + current +"']");.
ෆ්‍රෙඩ්රික් හමීඩි

7
00 c00lryguy, jQuery UI එකක් අර්ථ දක්වයි, සහ අවට තනිවම ක්‍රියාත්මක කිරීම් තිබේ. එය jQuery Core වෙත එකතු කිරීමට ගත් උත්සාහයන් ප්‍රතික්ෂේප කළ බව පෙනේ . දෙවරක් .
ෆ්‍රෙඩ්රික් හමීඩි

6
සමාන පෝස්ට් එකක මෙම පිළිතුරට පෙරහන් ශ්‍රිතයට උදාහරණයක් ඇත
drzaus

78
JQuery .data (...) ශ්‍රිතය හරහා දත්ත එකතු කළ හොත් මෙය ක්‍රියා නොකරනු ඇතැයි මම කණගාටු වෙමි, මෙය සැමවිටම ගුණාංගයක් ඉදිරිපත් නොකරන අතර සොම් ටයිම්ස් බ්‍රව්සර් විශේෂිත ගබඩා යාන්ත්‍රණයක් භාවිතා කරයි. JQuery හරයට දත්ත විශේෂිත තේරීමක් තිබිය යුතු යැයි මා සිතන තවත් හේතුවක්.
ආරොන්එල්එස්

78
ඔබ data ('# මූලද්‍රව්‍යය') සමඟ දත්ත සැකසූ මූලද්‍රව්‍ය සඳහා එය ක්‍රියා නොකරන බව සලකන්න. දත්ත ('යම්-නම-නම', අගය); නමුත් දෘ c කේත සහිත ගුණාංග සඳහා පමණි. මට මෙම ගැටළුව ඇති අතර එය සෘජුවම ආරෝපණය writing ('# මූලද්‍රව්‍යය') ලිවීමෙන් දත්ත සැකසීමට ක්‍රියා කරයි. Attr ('data-some-att-name', value);
පවෙල්

472

ඔබට ඒ සියල්ල ටයිප් කිරීමට අවශ්‍ය නැතිනම්, දත්ත ගුණාංගයෙන් විමසීමට කෙටි ක්‍රමයක් මෙන්න:

$("ul[data-slide='" + current +"']");

FYI: http://james.padolsey.com/javascript/a-better-data-selector-for-jquery/


31
ඔබ ගැන සැලකිලිමත් වන අය සඳහා, ව්‍යුහය අනුව <ul><li data-slide="item"></li></ul>මෙම පිළිතුර තේරීම නිර්වචනය නොකෙරේ, එබැවින් පරිශීලකයාගේ තත්වය අනුව එය ක්‍රියා නොකරයි. මෙම පිළිතුර ව්‍යුහය සඳහා ක්‍රියා කරනු ඇත. <ul data-slide="item"><li></li></ul> එහි ජනප්‍රියතාවය සංක්ෂිප්තතාවය නිසා ඇති බව මට වැටහී ඇති නමුත් එය තාක්‍ෂණිකව වැරදි පිළිතුරකි. jsfiddle.net/py5p2abL/1
akousmata

5
එය අරාව ලෙස සැලකීමට අමතක නොකරන්න. [0]හමු වූ පළමු අංගයට ප්‍රවේශ වීමට භාවිතා කරන්න .
අමිනා නුරෙයිනි

විකාර අතුරු ආබාධයක් ... මෙම ක්‍රමය ක්‍රියාත්මක .find("[data-attrib='value']")නොවූ විට දත්ත ලක්ෂණය සමඟ මූලද්‍රව්‍යයට ගැලපේ . අගයන් දත්ත ගුණාංග jQuery විසින් එකතු කරනවාද නැද්ද යන්න මම
නොදනිමි

1
පිළිතුරු දෙක වෙනස් දේවල් 2 ක් කරන නිසා එය විකාරයක් නොවේ. $.findවිශේෂයෙන් එම මූලද්‍රව්‍යයෙන් පැවත එන්නන් සොයා ගනී , නමුත් තේරීම් තීරුවේ පෙරහන් සින්ටැක්ස් භාවිතා කිරීමෙන් ප්‍රති .ල පෙරහන් වේ.
ෆිල්

230

[Data-x = ...] සමඟ සෙවීමේදී, විමසිල්ලෙන් සිටින්න, එය jQuery.data (..) setter සමඟ ක්‍රියා නොකරයි :

$('<b data-x="1">'  ).is('[data-x=1]') // this works
> true

$('<b>').data('x', 1).is('[data-x=1]') // this doesn't
> false

$('<b>').attr('data-x', 1).is('[data-x=1]') // this is the workaround
> true

ඒ වෙනුවට ඔබට මෙය භාවිතා කළ හැකිය:

$.fn.filterByData = function(prop, val) {
    return this.filter(
        function() { return $(this).data(prop)==val; }
    );
}

$('<b>').data('x', 1).filterByData('x', 1).length
> 1

1
මෙම $.fn.filterByDataදීප්තිමත් ය; කෙසේ වෙතත්, මෙය පිටත පිටපත් කරන්නන්ට අනතුරු ඇඟවීමකි ... ඔබට අවශ්‍ය $('<b>').filterByData('x', 1)වන්නේ <b>ටැග් පමණි data-x="1". ඔබ .data(x, 1)කොටස පිටපත්-අලවන්නේ නම් ... data-xපෙරීමට පෙර ඔබ ඔබේ "1" ලෙස සකසනු ඇත .
WEBjuju

41

JQuery නොමැතිව, ES6

document.querySelectorAll(`[data-slide='${current}']`);

ප්‍රශ්නය JQuery ගැන බව මම දනිමි, නමුත් පා readers කයන්ට පිරිසිදු JS ක්‍රමයක් අවශ්‍ය විය හැකිය.


39

මම මනෝ බ්‍රම්ගේ ෆිල්ටර්බයිඩේටා දිගුව jQuery වෙත වැඩි දියුණු කළෙමි .

කලින් දිගුව යතුරු-වටිනාකම් යුගලයක් මත සෙවූ විට, මෙම දිගුව සමඟ ඔබට දත්ත ගුණාංගයක් එහි වටිනාකම නොසලකා අතිරේකව සෙවිය හැකිය.

(function ($) {

    $.fn.filterByData = function (prop, val) {
        var $self = this;
        if (typeof val === 'undefined') {
            return $self.filter(
                function () { return typeof $(this).data(prop) !== 'undefined'; }
            );
        }
        return $self.filter(
            function () { return $(this).data(prop) == val; }
        );
    };

})(window.jQuery);

භාවිතය:

$('<b>').data('x', 1).filterByData('x', 1).length    // output: 1
$('<b>').data('x', 1).filterByData('x').length       // output: 1

හෝ ෆෙඩල්: http://jsfiddle.net/PTqmE/46/


34

JQuery සහ දත්ත- * ගුණාංග භාවිතා කරමින් මූලද්‍රව්‍ය ලබා ගැනීමේදී මම එකම ගැටලුවකට මුහුණ දී සිටිමි.

එබැවින් ඔබේ යොමු කිරීම සඳහා කෙටිම කේතය මෙහි ඇත:

මෙය මගේ HTML කේතය:

<section data-js="carousel"></section>
<section></section>
<section></section>
<section data-js="carousel"></section>

මේ මගේ jQuery තේරීම්කරු:

$('section[data-js="carousel"]');
// this will return array of the section elements which has data-js="carousel" attribute.


15

$("ul [data-slide='" + current +"']");පහත සඳහන් ව්‍යුහය සඳහා මෙම තේරීම් කාරකය ක්‍රියා කරයි:

<ul><li data-slide="item"></li></ul>  

මෙය $("ul[data-slide='" + current +"']");ක්‍රියාත්මක වන අතර:

<ul data-slide="item"><li></li></ul>


13

මූලද්‍රව්‍ය වර්ගය කල්තියා නොදැන මෙම කාර්යය කරන්නේ කෙසේද යන්න පිළිබඳ ඔහුගේ මුල් ප්‍රශ්නයට ආපසු යමින්, පහත දැක්වෙන්නේ මෙයයි:

$(ContainerNode).find(el.nodeName + "[data-slide='" + current + "']");
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.