如何扩展jQuery以便更容易检索tagName
我希望扩展jQuery,以便我可以轻松地检索jQuery对象中第一个元素的tagName。 这就是我想出来的,但它似乎不起作用:
$.fn.tagName = function() { return this.each(function() { return this.tagName; }); } alert($('#testElement').tagName());
有什么想法有什么不对吗?
顺便说一下,我想把它用于测试而不是生产。
试试这个:
$.fn.tagName = function() { return this.get(0).tagName; } alert($('#https://stackoverflow.com/questions/411688/how-to-extend-jquery-to-make-it-easier-to-retrieve-the-tagname/testElement').tagName());
为了解释为什么原始示例不起作用, each()
方法将始终返回原始jQuery对象(除非jQuery对象本身被修改)。 要查看每个代码中发生的情况,下面是一些伪代码,它显示了each()
方法的工作原理:
function each(action) { for(var e in jQueryElements) { action(); } return jQueryObject; }
这不是each()
真正实现的方式(可能是长镜头),但它是为了表明你的action()
函数的返回值被忽略。
为什么要创建一个插件? 似乎有点不必要……
alert( $('div')[0].tagName );
您可能希望添加toLowerCase()以使其更加一致(并且符合XHTML)。
$.fn.tagName = function() { return this.get(0).tagName.toLowerCase(); } alert($('#https://stackoverflow.com/questions/411688/how-to-extend-jquery-to-make-it-easier-to-retrieve-the-tagname/testElement').tagName());
这个将返回匹配元素的小写标记名。
例如,
jQuery("#https://stackoverflow.com/questions/411688/how-to-extend-jquery-to-make-it-easier-to-retrieve-the-tagname/test_div").tagName();
会返回div
(假设该元素是div)。
如果传递元素集合,则返回所有标记名的数组,其中每个数组条目对应于匹配的元素。
例如,如果我们跑
jQuery(".classname").tagName();
在以下(X)HTML上:
https://stackoverflow.com/questions/411688/how-to-extend-jquery-to-make-it-easier-to-retrieve-the-tagname/test text
Some more text
会有一组标记名:
["p", "li", "p"]
这是函数 – 它与上面基本相同,但它支持多个元素,这些元素可能对您的项目有用,也可能没用。
jQuery.fn.tagName = function(){ if(1 === this.length){ return this[0].tagName.toLowerCase(); } else{ var tagNames = []; this.each(function(i, el){ tagNames[i] = el.tagName.toLowerCase(); }); return tagNames; } };