นี่คือ:
var contents = document.getElementById('contents');
เช่นเดียวกับสิ่งนี้:
var contents = $('#contents');
ระบุว่าโหลด jQuery แล้วหรือ
นี่คือ:
var contents = document.getElementById('contents');
เช่นเดียวกับสิ่งนี้:
var contents = $('#contents');
ระบุว่าโหลด jQuery แล้วหรือ
คำตอบ:
ไม่แน่นอน !!
document.getElementById('contents'); //returns a HTML DOM Object
var contents = $('#contents'); //returns a jQuery Object
ใน jQuery เพื่อให้ได้ผลลัพธ์เดียวกันdocument.getElementById
คุณสามารถเข้าถึง jQuery Object และรับองค์ประกอบแรกในวัตถุ (จำวัตถุ JavaScript ทำหน้าที่คล้ายกับอาร์เรย์ที่เชื่อมโยง)
var contents = $('#contents')[0]; //returns a HTML DOM Object
document.getElementBy
ไม่ทำงานอย่างถูกต้องใน <IE8 นอกจากนี้ยังได้รับองค์ประกอบโดยname
ดังนั้นคุณสามารถโต้แย้งในทางทฤษฎีdocument.getElementById
ไม่เพียง แต่ทำให้เข้าใจผิด แต่สามารถคืนค่าที่ไม่ถูกต้อง ผมคิดว่า @John ใหม่นี้ แต่ผมคิดว่ามันจะไม่เจ็บเพิ่มใน.
$('#'+id)[0]
ไม่เท่ากับdocument.getElementById(id)
เพราะid
อาจมีอักขระที่ถือว่าพิเศษใน jQuery!
jquery equivalent of document.getelementbyid
และผลลัพธ์แรกคือโพสต์นี้ ขอบคุณ!!!
$('#contents')[0].id
ส่งคืนชื่อ id
เลขที่
การโทรdocument.getElementById('id')
จะส่งคืนวัตถุ DOM ดิบ
การโทร$('#id')
จะส่งคืนวัตถุ jQuery ที่ล้อมวัตถุ DOM และให้วิธีการ jQuery
ดังนั้นคุณสามารถเรียกวิธี jQuery เท่านั้นเช่นcss()
หรือanimate()
ในการ$()
โทร
คุณยังสามารถเขียน$(document.getElementById('id'))
ซึ่งจะกลับวัตถุ jQuery $('#id')
และเทียบเท่ากับ
คุณจะได้รับวัตถุ DOM พื้นฐานจากวัตถุ jQuery $('#id')[0]
โดยการเขียน
In one sentence, DOM objects are the objects that the web browser is using to render elements on the web page whereas jQuery objects are basically wrapper objects around a set of DOM elements.
ปิด แต่ไม่เหมือนกัน พวกเขาได้รับองค์ประกอบเดียวกัน แต่รุ่น jQuery ถูกห่อในวัตถุ jQuery
จะเท่ากับนี้
var contents = $('#contents').get(0);
หรือสิ่งนี้
var contents = $('#contents')[0];
สิ่งเหล่านี้จะดึงองค์ประกอบออกมาจากวัตถุ jQuery
หมายเหตุเกี่ยวกับความแตกต่างของความเร็ว แนบ snipet ต่อไปนี้กับการโทรแบบ onclick:
function myfunc()
{
var timer = new Date();
for(var i = 0; i < 10000; i++)
{
//document.getElementById('myID');
$('#myID')[0];
}
console.log('timer: ' + (new Date() - timer));
}
สลับการคอมเม้นต์อีกครั้งจากนั้นคอมเม้นต์อีกอัน ในการทดสอบของฉัน
document.getElementbyId โดยเฉลี่ยประมาณ35 มิลลิวินาที (ผันผวนจาก
25ms
มากไปจนถึง52ms
ประมาณ15 runs
)
ในทางกลับกัน
jQuery เฉลี่ยประมาณ200ms (ตั้งแต่
181ms
การ222ms
ที่เกี่ยวกับ15 runs
)จากการทดสอบอย่างง่ายนี้คุณสามารถเห็นได้ว่า jQuery ใช้เวลาประมาณ6 ครั้งเป็นเวลานาน
แน่นอนว่ามีมากกว่า10000
การทำซ้ำดังนั้นในสถานการณ์ที่ง่ายผมก็อาจจะใช้ jQuery เพื่อความสะดวกในการใช้งานและทั้งหมดของสิ่งดีๆอื่น ๆ เช่นและ.animate
.fadeTo
แต่ใช่ในทางเทคนิคgetElementById
ไม่น้อยเร็วขึ้น
$('#someID')
ด้วยdocument.getElementById("someID")
หรือไม่ ฉันกำลังทำงานกับบางสิ่งที่ฉันใช้อย่างกว้างขวาง$('#someID')
และเพจของฉันทำงานช้าสำหรับอินพุตไฟล์ขนาดใหญ่ โปรดแนะนำฉันว่าฉันควรทำอย่างไร
var $myId = $('#myId');
$myId
การค้นหาโดยใช้ ID โดยทั่วไปนั้นเป็นสิ่งที่ค่อนข้างเร็ว แต่ถ้าหน้าเว็บช้าอาจมีเหตุผลอื่น
ไม่ได้ผลตอบแทนแรกคือองค์ประกอบ DOM หรือค่า null ในขณะที่ค่าที่สองคืนค่าวัตถุ jQuery วัตถุ jQuery จะว่างเปล่าถ้าองค์ประกอบที่มี ID ของไม่contents
ถูกจับคู่
องค์ประกอบ DOM ที่ส่งคืนโดยdocument.getElementById('contents')
อนุญาตให้คุณทำสิ่งต่าง ๆ เช่นเปลี่ยน.innerHTML
(หรือ.value
) ฯลฯ อย่างไรก็ตามคุณจะต้องใช้วิธีการ jQuery ในวัตถุ jQuery
var contents = $('#contents').get(0);
มีความเป็นป่าเถื่อนมากขึ้นอย่างไรก็ตามหากไม่มีการcontents
จับคู่องค์ประกอบที่มีรหัสตรงกับdocument.getElementById('contents')
จะคืนค่าว่าง แต่$('#contents').get(0)
จะคืนค่าไม่ได้กำหนด
ข้อดีอย่างหนึ่งของการใช้วัตถุ jQuery ก็คือคุณจะไม่ได้รับข้อผิดพลาดใด ๆ หากไม่มีการส่งคืนองค์ประกอบเนื่องจากมีการส่งคืนวัตถุเสมอ อย่างไรก็ตามคุณจะได้รับข้อผิดพลาดหากคุณพยายามที่จะดำเนินการเกี่ยวกับการnull
ส่งคืนโดยdocument.getElementById
ไม่จริงผลลัพธ์เดียวกันจะเป็น:
$('#contents')[0]
jQuery ไม่ทราบจำนวนผลลัพธ์ที่จะถูกส่งคืนจากแบบสอบถาม สิ่งที่คุณได้รับกลับมาเป็นวัตถุ jQuery พิเศษซึ่งเป็นชุดของตัวควบคุมทั้งหมดที่ตรงกับแบบสอบถาม
ส่วนหนึ่งของสิ่งที่ทำให้ jQuery สะดวกมากคือเมธอด MOST ที่เรียกบนวัตถุนี้ซึ่งดูเหมือนว่ามีความหมายสำหรับการควบคุมเพียงอันเดียวจริง ๆ แล้วอยู่ในวงวนที่เรียกว่าสมาชิกทั้งหมดที่เขารวบรวม
เมื่อคุณใช้ [0] ไวยากรณ์คุณใช้องค์ประกอบแรกจากคอลเลกชันด้านใน ณ จุดนี้คุณจะได้รับวัตถุ DOM
ในกรณีที่คนอื่นพบสิ่งนี้ ... นี่คือข้อแตกต่าง:
หาก id มีอักขระที่ไม่รองรับมาตรฐาน HTML (ดูคำถาม SO ที่นี่ ) ดังนั้น jQuery อาจไม่สามารถค้นหาได้แม้ว่า getElementById จะทำเช่นนั้น
สิ่งนี้เกิดขึ้นกับฉันด้วยรหัสที่มีอักขระ "/" (เช่น: id = "a / b / c") โดยใช้ Chrome:
var contents = document.getElementById('a/b/c');
สามารถค้นหาองค์ประกอบของฉันได้ แต่:
var contents = $('#a/b/c');
ไม่ได้.
Btw การแก้ไขอย่างง่ายคือการย้าย id นั้นไปยังฟิลด์ชื่อ JQuery ไม่มีปัญหาในการค้นหาองค์ประกอบโดยใช้:
var contents = $('.myclass[name='a/b/c']);
ความแตกต่างที่สำคัญคือความจริงที่ว่ามันถูกห่อในวัตถุ jQuery ด้วยการเรียก jQuery เทียบกับวัตถุ DOM ดิบโดยใช้จาวาสคริปต์ตรง วัตถุ jQuery จะสามารถทำหน้าที่ jQuery อื่น ๆ ได้แน่นอน แต่ถ้าคุณต้องการจัดการ DOM อย่างง่ายเช่นการใส่สไตล์พื้นฐานหรือการจัดการเหตุการณ์พื้นฐานวิธี JavaScript ตรงนั้นจะเร็วกว่า jQuery เล็กน้อยเนื่องจากคุณไม่ได้ทำการ jQuery ไม่ต้องโหลดในไลบรารีภายนอกของรหัสที่สร้างขึ้นบน JavaScript มันบันทึกขั้นตอนพิเศษ
var contents = document.getElementById('contents');
var contents = $('#contents');
ข้อมูลโค้ดไม่เหมือนกัน คนแรกส่งคืนElement
วัตถุ ( แหล่งที่มา ) อันที่สองเทียบเท่า jQuery จะส่งคืนวัตถุ jQuery ที่มีคอลเลกชันขององค์ประกอบศูนย์หรือหนึ่ง DOM ( เอกสาร jQuery ) jQuery ภายในใช้document.getElementById()
เพื่อประสิทธิภาพ
ในทั้งสองกรณีหากพบมากกว่าหนึ่งองค์ประกอบเฉพาะองค์ประกอบแรกจะถูกส่งกลับ
เมื่อตรวจสอบโครงการ github สำหรับ jQuery ฉันพบตัวอย่างบรรทัดต่อไปนี้ซึ่งดูเหมือนว่าจะใช้รหัส document.getElementById ( https://github.com/jquery/jquery/blob/master/src/core/init.jsบรรทัด 68 เป็นต้นไป)
// HANDLE: $(#id)
} else {
elem = document.getElementById( match[2] );
ความแตกต่างอีกประการหนึ่ง: getElementById
ส่งคืนการจับคู่ครั้งแรกในขณะที่$('#...')
ส่งคืนชุดการจับคู่ - ใช่ ID เดียวกันสามารถทำซ้ำในเอกสาร HTML ได้
นอกจากนี้getElementId
ถูกเรียกจากเอกสารในขณะที่$('#...')
สามารถเรียกได้จากตัวเลือก ดังนั้นในรหัสด้านล่างdocument.getElementById('content')
จะคืนค่าเนื้อหาทั้งหมด แต่$('form #content')[0]
จะส่งคืนภายในฟอร์ม
<body id="content">
<h1>Header!</h1>
<form>
<div id="content"> My Form </div>
</form>
</body>
อาจเป็นเรื่องแปลกที่จะใช้ ID ซ้ำกัน แต่ถ้าคุณใช้บางอย่างเช่น Wordpress เทมเพลตหรือปลั๊กอินอาจใช้ id เดียวกันกับที่คุณใช้ในเนื้อหา การเลือกสรรของ jQuery สามารถช่วยคุณได้
jQuery สร้างขึ้นด้วย JavaScript ซึ่งหมายความว่ามันเป็นเพียงแค่จาวาสคริปต์ต่อไป
document.getElementById ()
document.getElementById () วิธีการคืนองค์ประกอบที่มีคุณสมบัติ ID ที่มีค่าที่ระบุและผลตอบแทนที่เป็นโมฆะถ้าไม่มีองค์ประกอบที่มี ID ที่ระบุมีอยู่ ID ควรจะไม่ซ้ำกันภายในหน้า
Jquery $ ()
การเรียก jQuery () หรือ $ () พร้อมตัวเลือก id เนื่องจากอาร์กิวเมนต์จะส่งคืนออบเจ็กต์ jQuery ที่มีคอลเลกชันของศูนย์หรือองค์ประกอบ DOM หนึ่งรายการค่า id แต่ละรายการต้องใช้เพียงครั้งเดียวภายในเอกสาร หากมีมากกว่าหนึ่งองค์ประกอบที่ได้รับการกำหนด ID เดียวกันการสืบค้นที่ใช้ ID นั้นจะเลือกเฉพาะองค์ประกอบที่ตรงกันใน DOM เท่านั้น
ฉันพัฒนาฐานข้อมูล noSQL สำหรับเก็บต้นไม้ DOM ในเว็บเบราว์เซอร์ที่อ้างอิงถึงองค์ประกอบ DOM ทั้งหมดในหน้าจะถูกเก็บไว้ในดัชนีแบบสั้น ดังนั้นไม่จำเป็นต้องใช้ฟังก์ชัน "getElementById ()" เพื่อรับ / แก้ไของค์ประกอบ เมื่อองค์ประกอบในแผนผัง DOM ถูกสร้างอินสแตนซ์บนหน้าฐานข้อมูลจะกำหนดคีย์หลักตัวแทนให้กับแต่ละองค์ประกอบ มันเป็นเครื่องมือฟรีที่http://js2dx.com
คำตอบทั้งหมดข้างต้นถูกต้อง ในกรณีที่คุณต้องการเห็นการทำงานอย่าลืมว่าคุณมี Console ในเบราว์เซอร์ที่คุณสามารถเห็นผลลัพธ์ที่ชัดเจนอย่างแท้จริง:
ฉันมี HTML:
<div id="contents"></div>
ไปที่คอนโซล(cntrl+shift+c)
และใช้คำสั่งเหล่านี้เพื่อดูผลลัพธ์ของคุณอย่างชัดเจน
document.getElementById('contents')
>>> div#contents
$('#contents')
>>> [div#contents,
context: document,
selector: "#contents",
jquery: "1.10.1",
constructor: function,
init: function …]
อย่างที่เราเห็นในกรณีแรกเราได้รับแท็กเอง (นั่นคือการพูดอย่างเคร่งครัดวัตถุ HTMLDivElement) ในระยะหลังเราจริง ๆ แล้วไม่มีวัตถุธรรมดา แต่เป็นอาร์เรย์ของวัตถุ และตามคำตอบอื่น ๆ ข้างต้นคุณสามารถใช้คำสั่งต่อไปนี้:
$('#contents')[0]
>>> div#contents
คำตอบทั้งหมดเป็นแบบเก่าวันนี้ในปี 2019 คุณสามารถเข้าถึงรหัสคีย์ filds ใน javascript ได้โดยตรงเพียงลองใช้
<p id="mytext"></p>
<script>mytext.innerText = 'Yes that works!'</script>
การสาธิตออนไลน์! - https://codepen.io/frank-dspeed/pen/mdywbre