Foreword: When it comes to jquery, what I have to say is the powerful selector function of jquery. This function is very powerful, and the sizzle module is separated separately for friends who only need to use the selector function. (This article will not talk about the powerful functions of the jquery selector. Let’s first talk about how jquery encapsulates DOM elements into jquery objects)
1. Dom objects and jquery objects
<body> <script src="https://cdn.bootcss.com/jquery/2.0.0/jquery.min.js"></script> <p id="box">测试</p> <script> var oBox = document.getElementById('box'); var oBox2 = document.querySelector('#box'); var $Box = $('#box'); console.log(oBox); console.log(oBox2); console.log($Box); </script> </body> </html>
Running results:
##We can see the difference from this. $() encapsulates the DOM object into a jquery object, and the DOM object is also stored in jquery[0]. This is why we say that to convert jquery objects into DOM objects, we only need to use jquery[0] or jquery.get(0).
2. Simulate jquery--encapsulate jquery object based on id
Let’s simplify it first and look at part of the process of encapsulating jquery objects
<body> <script src="https://cdn.bootcss.com/jquery/2.0.0/jquery.min.js"></script> <p id="box">测试</p> <script> var $Box = $('#box'); console.log('这是jquery对象'); console.log($Box); console.log('------分界线------'); (function(window,undefined){ var jQ = function(selector){ return new jQ.fn.init(selector); }; jQ.fn = jQ.prototype = { jquery:'2.0.0', //jquery版本号信息 constructor: jQ, //添加构造器属性 length:0, //初始length属性 selector:'', //初始selector属性 init: function(selector){ var match, elem, rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/; match = rquickExpr.exec( selector ); //console.log(match); //正则匹配找出id的值 if ( !selector ) { //如果selector为'',null,undefind直接退出操作 return this; } elem = document.getElementById(match[2]); this[0] = elem; this.context=document; this.length = 1; this.selector = selector; return this; } } jQ.fn.init.prototype = jQ.fn; window.$$ = jQ; })( window ); console.log('这是模拟的对象'); console.log($$('#box')); //输出封装的对象 </script> </body>
②Output result: (opened on Firefox browser)
chrome browserThere will be some differences in the display
For those who don’t understand the above code, I suggest you read the article I wrote earlier [jquery Source code】
Some issues need to be solved before starting to learn the source code.
#3. Simulate jquery--encapsulate the jquery object according to the tag name
##Directly upload the code <body>
<ul class="list">
<li>测试1</li>
<li>测试2</li>
<li>测试3</li>
<li>测试4</li>
</ul>
<script>
console.log('这是jquery对象');
var aLi1 = $('li');
console.log(aLi1);
console.log('------分界线------');
(function(window,undefined){
var jQ = function(selector,context){
return new jQ.fn.init(selector, context);
};
jQ.fn = jQ.prototype = {
jquery:'2.0.0', //jquery版本号信息
constructor: jQ, //添加构造器属性
length:0, //初始length属性
selector:'', //初始selector属性
init: function(selector, context){
var match, elem;
if ( !selector ) { //如果selector为'',null,undefind直接退出操作
return this;
}
elem = document.getElementsByTagName(selector);
for(var i =0,len=elem.length; i<len; i++){
this[i] = elem[i];
}
this.context=document;
this.length = elem.length;
this.selector = selector;
return this;
}
}
jQ.fn.init.prototype = jQ.fn;
window.$$ = jQ;
})( window );
console.log('这是模拟的对象');
console.log($$('li')); //输出封装的对象
</script>
</body>
Output result:
This is just a simple simulation, jq processing is far from simple, jquery also makes a lot of judgments (the following article will continue to talk about this issue). You can also find the prevObject attribute in the jquery object, which saves the previous-level search object. Just look at the example below to understand.
<body> <script src="https://cdn.bootcss.com/jquery/2.0.0/jquery.min.js"></script> <ul class="list"> <li>测试1</li> <li>测试2</li> <li>测试3</li> <li>测试4</li> </ul> <script> var aLi1 = $('li'); console.log(aLi1); var aLi2 = $('li','.list'); console.log(aLi2); var aLi3 = $('.list').find('li'); console.log(aLi3); </script> </body>
This article explains how $selector-- Encapsulate DOM into jquery objects. For more related content, please pay attention to the php Chinese website.
Related recommendations:
css3 animated navigation bar 3D
The front-end calls the WeChat payment interface
The above is the detailed content of $selector--how to encapsulate DOM into jquery objects. For more information, please follow other related articles on the PHP Chinese website!

Classselectorsareversatileandreusable,whileidselectorsareuniqueandspecific.1)Useclassselectors(denotedby.)forstylingmultipleelementswithsharedcharacteristics.2)Useidselectors(denotedby#)forstylinguniqueelementsonapage.Classselectorsoffermoreflexibili

IDsareuniqueidentifiersforsingleelements,whileclassesstylemultipleelements.1)UseIDsforuniqueelementsandJavaScripthooks.2)Useclassesforreusable,flexiblestylingacrossmultipleelements.

Using a class-only selector can improve code reusability and maintainability, but requires managing class names and priorities. 1. Improve reusability and flexibility, 2. Combining multiple classes to create complex styles, 3. It may lead to lengthy class names and priorities, 4. The performance impact is small, 5. Follow best practices such as concise naming and usage conventions.

ID and class selectors are used in CSS for unique and multi-element style settings respectively. 1. The ID selector (#) is suitable for a single element, such as a specific navigation menu. 2.Class selector (.) is used for multiple elements, such as unified button style. IDs should be used with caution, avoid excessive specificity, and prioritize class for improved style reusability and flexibility.

Key goals and advantages of HTML5 include: 1) Enhanced web semantic structure, 2) Improved multimedia support, and 3) Promoting cross-platform compatibility. These goals lead to better accessibility, richer user experience and more efficient development processes.

The goal of HTML5 is to simplify the development process, improve user experience, and ensure the dynamic and accessible network. 1) Simplify the development of multimedia content by natively supporting audio and video elements; 2) Introduce semantic elements such as, etc. to improve content structure and SEO friendliness; 3) Enhance offline functions through application cache; 4) Use elements to improve page interactivity; 5) Optimize mobile compatibility and support responsive design; 6) Improve form functions and simplify verification process; 7) Provide performance optimization tools such as async and defer attributes.

HTML5transformswebdevelopmentbyintroducingsemanticelements,multimediacapabilities,powerfulAPIs,andperformanceoptimizationtools.1)Semanticelementslike,,,andenhanceSEOandaccessibility.2)Multimediaelementsandallowdirectembeddingwithoutplugins,improvingu

TherealdifferencebetweenusinganIDversusaclassinCSSisthatIDsareuniqueandhavehigherspecificity,whileclassesarereusableandbetterforstylingmultipleelements.UseIDsforJavaScripthooksoruniqueelements,anduseclassesforstylingpurposes,especiallywhenapplyingsty


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

SublimeText3 English version
Recommended: Win version, supports code prompts!

EditPlus Chinese cracked version
Small size, syntax highlighting, does not support code prompt function

ZendStudio 13.5.1 Mac
Powerful PHP integrated development environment

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

VSCode Windows 64-bit Download
A free and powerful IDE editor launched by Microsoft
