Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
311 views
in Technique[技术] by (71.8m points)

javascript - how do I find elements that contain a data-* attribute matching a prefix using jquery

I'm want to create a selector to find elements which have attributes starting with a string. At this point, I'm assuming this selector does not exist. Do I need to extend the selector capabilities? Extending jQuery’s selector capabilities by James Padolsey

I need to express something like the Attribute Contains Prefix Selector [name|="value"], but instead of matching "value", I need to match against the name of the attribute, and not the value of the attribute.

<tag data-plugin-option1="val1" data-plugin-option2="val2" />

I'd like to end up with a syntax like this: $('tag(:attr|="data-plugin")') which should find the element tag because it has at least one element that starts with data-plugin

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Well, I guess I'm reading your question differently.

The way I read it, you want to create a custom selector that selects elements that have a given attribute name (or the start of that name).

If so, I think you'd need to iterate of the attributes collection for each element.

DEMO: http://jsfiddle.net/GgmM7/

$.extend($.expr[':'],{
    attrNameStart: function(el,i,props) {

        var hasAttribute = false;

        $.each( el.attributes, function(i,attr) {
            if( attr.name.indexOf( props[3] ) !== -1 ) {
                hasAttribute = true;
                return false;  // to halt the iteration
            }
        });

        return hasAttribute;
    }
});

$('img:attrNameStart(data-plugin)')

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...