jQuery如何根據數據屬性值查找元素?

我有如下場景: css

var el = 'li';

頁面上有5個<li> ,每一個都有一個data-slide=number屬性(數字分別爲1,2,3,4,5)html

我如今須要找到當前活動的幻燈片編號,該編號映射到var current = $('ul').data(current); 並在每次幻燈片更改時更新。 node

到目前爲止,個人嘗試都沒有成功,嘗試構建與當前幻燈片匹配的選擇器: jquery

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

不匹配/返回任何東西...... ajax

我沒法對li部分進行硬編碼的緣由是,這是一個用戶可訪問的變量,若是須要能夠更改成不一樣的元素,所以它可能並不老是一個liapi

關於我缺乏的任何想法? app


#1樓

回到他原來的問題,關於如何在不事先知道元素類型的狀況下完成這項工做,如下是: dom

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

#2樓

使用[data-x = ...]進行搜索時,請注意, 它不適用於jQuery.data(..)setteride

$('<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

您可使用此代替: ui

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

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

#3樓

使用jQuery和data- *屬性獲取元素時遇到了一樣的問題。

因此供您參考,最短的代碼在這裏:

這是個人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.

#4樓

我改進了psycho brm對jQuery 的filterByData擴展

若是前一個擴展名在一個鍵值對上搜索,則使用此擴展名,您還能夠搜索數據屬性的存在,而無論其值如何。

(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

// test data function extractData() { log('data-prop=val ...... ' + $('div').filterByData('prop', 'val').length); log('data-prop .......... ' + $('div').filterByData('prop').length); log('data-random ........ ' + $('div').filterByData('random').length); log('data-test .......... ' + $('div').filterByData('test').length); log('data-test=anyval ... ' + $('div').filterByData('test', 'anyval').length); } $(document).ready(function() { $('#b5').data('test', 'anyval'); }); // the actual extension (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); //just to quickly log function log(txt) { if (window.console && console.log) { console.log(txt); //} else { // alert('You need a console to check the results'); } $("#result").append(txt + "<br />"); }
#bPratik { font-family: monospace; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <div id="bPratik"> <h2>Setup</h2> <div id="b1" data-prop="val">Data added inline :: data-prop="val"</div> <div id="b2" data-prop="val">Data added inline :: data-prop="val"</div> <div id="b3" data-prop="diffval">Data added inline :: data-prop="diffval"</div> <div id="b4" data-test="val">Data added inline :: data-test="val"</div> <div id="b5">Data will be added via jQuery</div> <h2>Output</h2> <div id="result"></div> <hr /> <button onclick="extractData()">Reveal</button> </div>

或小提琴: http//jsfiddle.net/PTqmE/46/


#5樓

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

我但願這可能會更好

謝謝

相關文章
相關標籤/搜索