jQuery document.createElement සමානද?


1256

මම පැරණි ජාවාස්ක්‍රිප්ට් කේත නැවත ප්‍රතිනිර්මාණය කරමින් සිටින අතර DOM හැසිරවීම් විශාල ප්‍රමාණයක් සිදුවෙමින් පවතී.

var d = document;
var odv = d.createElement("div");
odv.style.display = "none";
this.OuterDiv = odv;

var t = d.createElement("table");
t.cellSpacing = 0;
t.className = "text";
odv.appendChild(t);

JQuery භාවිතා කර මෙය කිරීමට වඩා හොඳ ක්‍රමයක් තිබේදැයි දැන ගැනීමට මම කැමතියි. මම අත්හදා බැලුවෙමි:

var odv = $.create("div");
$.append(odv);
// And many more

නමුත් මෙය වඩා හොඳ දැයි මට විශ්වාස නැත.


jsben.ch/#/ARUtz - jquery vs createElement සඳහා මිණුම් ලකුණක්
EscapeNetscape


නොකැඩූ TypeError: c .Create යනු ශ්‍රිතයක් නොවේ
Tyguy7

Answers:


1293

මෙන්න "එක්" පේළියේ ඔබේ උදාහරණය.

this.$OuterDiv = $('<div></div>')
    .hide()
    .append($('<table></table>')
        .attr({ cellSpacing : 0 })
        .addClass("text")
    )
;

යාවත්කාලීන කිරීම : මෙම පෝස්ට් එක තවමත් තදබදයක් ඇති බැවින් එය යාවත්කාලීන කිරීමට මම සිතුවෙමි. පහත දැක්වෙන අදහස් දැක්වීමේදී $("<div>")එදිරිව $("<div></div>")එදිරිව $(document.createElement('div'))නව මූලද්‍රව්‍යයන් නිර්මාණය කිරීමේ ක්‍රමයක් ලෙස යම් සාකච්ඡාවක් ඇති අතර එය "හොඳම" වේ.

මම කුඩා මිණුම් දණ්ඩක් එක් කළ අතර , ඉහත විකල්ප 100,000 වාරයක් පුනරාවර්තනය කිරීමේ ප්‍රති results ල මෙහි දැක්වේ:

jQuery 1.4, 1.5, 1.6

               Chrome 11  Firefox 4   IE9
<div>            440ms      640ms    460ms
<div></div>      420ms      650ms    480ms
createElement    100ms      180ms    300ms

jQuery 1.3

                Chrome 11
<div>             770ms
<div></div>      3800ms
createElement     100ms

jQuery 1.2

                Chrome 11
<div>            3500ms
<div></div>      3500ms
createElement     100ms

මම හිතන්නේ එය ලොකු පුදුමයක් නොවේ, නමුත් document.createElementවේගවත්ම ක්‍රමයයි. ඇත්ත වශයෙන්ම, ඔබ පිටත්ව ගොස් ඔබේ සම්පූර්ණ කේත පදනම නැවත ප්‍රතිනිර්මාණය කිරීමට පෙර, අප මෙහි කතා කරන වෙනස්කම් (jQuery හි පෞරාණික අනුවාදයන් හැර) මූලද්‍රව්‍ය දහසකට අමතර මිලි තත්පර 3 කට සමාන බව මතක තබා ගන්න .


යාවත්කාලීන 2

JQuery 1.7.2 සඳහා යාවත්කාලීන කර JSBen.chඇති අතර, මගේ ප්‍රාථමික මිණුම් සලකුණු වලට වඩා තරමක් විද්‍යාත්මක විය හැකි මිණුම් ලකුණ තබන්න, එය දැන් සෙනග පිරී ඉතිරී යා හැකිය!

http://jsben.ch/#/ARUtz


70
JQuery ඔබේ HTML නූල මූලද්‍රව්‍යයක් බවට පරිවර්තනය කිරීමට වඩා document.createElement වඩා වේගවත් බව ඔබට පෙනී යනු ඇත. (දේවල් වඩාත් කාර්යක්ෂම කිරීමට ඔබට අවශ්‍යතාවයක් තිබේ නම්)
සුගන්ද්‍රන්

25
JQuery <1.3 සඳහා එය සත්‍යයකි. එය දැන් වේගය සමාන වේ.
රොබ් ස්ටීවන්සන්-ලෙගට්

15
E කෙවින්, එය සත්‍යයකි, කෙසේ වෙතත් එය jQuery වැඩිපුර වැඩ කරයි (එය අවසන් ටැගය එක් කිරීම සඳහා එය රීජෙක්ස් හරහා ධාවනය කරයි), එබැවින් මම ඉහත ක්‍රමයට වැඩි කැමැත්තක් දක්වමි. එසේම, එය ඔබේ කේතය $('div')දෘශ්‍යමය වශයෙන් බොහෝ සමාන වන නමුත් ක්‍රියාකාරී ලෙස ධ්‍රැවයෙන් වෙන් කරයි.
nickf

14
ඉතින් මූලික වශයෙන් unSungendran & icknickf සංයෝජනයක් වනු ඇති $(document.createElement('div'))අතර එය වේගවත්ම විය යුතුද?
කොල්කි

14
මම හිතන්නේ "නිවැරදි" මාර්ගය $ ('<div />') සමඟ, IMO සමඟ ඊටත් වඩා "අර්ථයක්" ඇත, මන්ද ඔබ පැහැදිලිවම නෝඩ් එකක් නිර්මාණය කරන බව පැහැදිලිය. නරක දෙය නම් මේ ආකාරයෙන් සියලුම සංස්කාරකවරුන්ගේ උද්දීපනය වන සින්ටැක්ස් බිඳ
දැමීමයි

139

ඔබට jQuery ඉදිකිරීම්කරුවකුට එක් කිරීමට අවශ්‍ය මූලද්‍රව්‍යයන්ගේ HTML සරලව සැපයීම $()මඟින් අළුතින් සාදන ලද HTML වෙතින් jQuery වස්තුවක් ආපසු ලබා දෙනු ඇත, එය jQuery append()ක්‍රමවේදය භාවිතයෙන් DOM සමඟ එකතු කිරීමට සුදුසු වේ .

උදාහරණයක් වශයෙන්:

var t = $("<table cellspacing='0' class='text'></table>");
$.append(t);

ඔබට අවශ්‍ය නම් ක්‍රමලේඛිකව මෙම වගුව ජනගහනය කළ හැකිය.

පංති නම් හෝ වෙනත් ගුණාංග ඇතුළුව ඔබ කැමති ඕනෑම අත්තනෝමතික HTML එකක් නියම කිරීමට මෙය ඔබට හැකියාව ලබා දෙයි, ඒවා භාවිතා කිරීමට වඩා සංක්ෂිප්ත විය හැකි createElementඅතර පසුව JS වැනි cellSpacingසහ ඒ classNameහරහා ගුණාංග සැකසෙනු ඇත.


7
සමහර විට මෙය පැහැදිලිව පෙනෙන අතර ඔබේ උදාහරණයෙන් ඇඟවෙනු ඇත, නමුත් j ("<html string>") සින්ටැක්ස් භාවිතයෙන් jQuery DOM මූලද්‍රව්‍යයක් නිර්මාණය කිරීම, ස්වදේශික <element> .appendChild ක්‍රමය හෝ ඊට සමාන භාවිතා කරමින් DOM වෙත එකතු කළ නොහැක. ඔබ jQuery උපග්‍රන්ථ ක්‍රමය භාවිතා කළ යුතුය.
ආදම්

4
$(htmlStr)ලෙස ක්‍රියාත්මක වේ document.createElement("div").innerHTML = htmlStr. වෙනත් වචන වලින් කිවහොත්, එය බ්‍රව්සරයේ HTML විග්‍රහකය ඉල්ලා සිටී. අක්‍රීය HTML අනෙකුත් බ්‍රව්සර් වලට එරෙහිව IE හි වෙනස් ලෙස කැඩී යයි.
මතෙව්

2
D ඇඩම් jQuery වස්තුවට getස්වදේශීය DOM මූලද්‍රව්‍යය නැවත ලබා දෙන ශ්‍රිතය ඇත. (මෙම මාතෘකාව පැරණි බව මම දනිමි, නමුත් මම එය යොමු කිරීම සඳහා එකතු කරමි. ;-))
කොන්ස්ටන්ටිනෝ සාරෝහාස්

1
ඔබට html නූල
fguillen

1
D ඇඩම් හෝ, ඔබේ කේත ප්‍රවාහය / ඇස් මත එය පහසු නම්, ඔබට කළ හැකිය[dom element].appendChild($('<html>')[0]);
ACK_stoverflow

67

නව DOM මූලද්‍රව්‍ය නිර්මාණය කිරීම jQuery()ක්‍රමයේ මූලික ලක්ෂණයකි , බලන්න:


17
ලේඛනය සම්බන්ධ කිරීම ගැන ස්තූතියි! $('<a>')වෙන් කළ නොහැකි ය!
කර්නල් භීතිකාව

49

මම එහෙම කරනවා:

$('<div/>',{
    text: 'Div text',
    class: 'className'
}).appendTo('#parentDiv');

44

සිට jQuery1.8භාවිතා $.parseHTML()අංග නිර්මාණය කිරීමට වඩා හොඳ තේරීම වේ.

වාසි දෙකක් තිබේ:

1. ඔබ පැරණි ක්‍රමය භාවිතා කරන්නේ නම්, එය වැනි දෙයක් විය හැකිය $(string), ඔබට html ටැගයක් තෝරා ගැනීමට හෝ නව අංගයක් සෑදීමට අවශ්‍ය දැයි තහවුරු කර ගැනීම සඳහා jQuery විසින් නූල පරීක්ෂා කරනු ඇත. භාවිතා කිරීමෙන් $.parseHTML(), ඔබ jQuery වෙත පවසන්නේ ඔබට නව අංගයක් පැහැදිලිවම නිර්මාණය කිරීමට අවශ්‍ය බවය, එබැවින් කාර්ය සාධනය ටිකක් හොඳ විය හැකිය.

2. වඩා වැදගත් දෙය නම් ඔබ පැරණි ක්‍රමය භාවිතා කරන්නේ නම් හරස් අඩවි ප්‍රහාරයකින් ( වැඩි විස්තර ) ඔබ පීඩා විඳිය හැකිය . ඔබට එවැනි දෙයක් තිබේ නම්:

    var userInput = window.prompt("please enter selector");
    $(userInput).hide();

නරක පුද්ගලයෙකුට <script src="xss-attach.js"></script>ඔබව විහිළුවට ලක් කළ හැකිය . වාසනාවකට මෙන්, $.parseHTML()ඔබ වෙනුවෙන් මෙම අපහසුතාවයෙන් වළකින්න:

var a = $('<div>')
// a is [<div>​</div>​]
var b = $.parseHTML('<div>')
// b is [<div>​</div>​]
$('<script src="xss-attach.js"></script>')
// jQuery returns [<script src=​"xss-attach.js">​</script>​]
$.parseHTML('<script src="xss-attach.js"></script>')
// jQuery returns []

කෙසේ වෙතත්, එය html මූලද්‍රව්‍යයක් වන aඅතර bඑය jQuery වස්තුවක් බව කරුණාවෙන් සලකන්න:

a.html('123')
// [<div>​123​</div>​]
b.html('123')
// TypeError: Object [object HTMLDivElement] has no method 'html'
$(b).html('123')
// [<div>​123​</div>​]

“[ඕනෑම] මූලද්‍රව්‍යයක් නිර්මාණය කිරීම සඳහා“ වඩා හොඳ තේරීම ”ශක්තිමත් විය හැකිය. ier siergiej ගේ පිළිතුරparseHTML බාහිර මූලාශ්‍රවලින් එන html සඳහා හොඳ යැයි කීම හොඳ කාර්යයක් කරයි, නමුත් " ප්‍රති j ල නව jQuery වස්තුවකට එතීමෙන් පසු සියලු තල්ලුව නැති වී යයි". එනම්, ඔබට නව jQuery- ඔතා ඇති html මූලද්‍රව්‍යයක් සෑදීම දැඩි ලෙස කේත කිරීමට අවශ්‍ය නම්, $("<div>stuff</div>")ශෛලිය තවමත් ජය ගන්නා බව පෙනේ.
රූෆින්

38

යාවත්කාලීන කරන්න

JQuery හි නවතම අනුවාදයන් අනුව, පහත දැක්වෙන ක්‍රමය දෙවන වස්තුවෙහි සම්මත ගුණාංග පවරන්නේ නැත

පෙර පිළිතුර

මට දැනෙන්නේ document.createElement('div')එකට භාවිතා jQueryකිරීම වේගවත් බවයි:

$(document.createElement('div'), {
    text: 'Div text',
    'class': 'className'
}).appendTo('#parentDiv');

29

මෙය ඉතා පැරණි ප්‍රශ්නයක් වුවද, මෑත තොරතුරු සමඟ එය යාවත්කාලීන කිරීම හොඳ යැයි මම සිතුවෙමි;

JQuery 1.8 සිට jQuery.parseHTML () ශ්‍රිතයක් ඇති අතර එය දැන් මූලද්‍රව්‍ය නිර්මාණය කිරීමේ වඩාත් කැමති ක්‍රමයකි. එසේම, HTML හරහා විග්‍රහ කිරීමේදී ගැටළු කිහිපයක් තිබේ $('(html code goes here)'), උදාහරණයක් ලෙස නිල jQuery වෙබ් අඩවිය ඔවුන්ගේ එක් නිකුතුවක පහත සඳහන් දේ සඳහන් කරයි :

ලිහිල් කළ HTML විග්‍රහ කිරීම: in (htmlString) ටැග් කිරීමට පෙර ඔබට නැවත වරක් ප්‍රමුඛ අවකාශ හෝ නව රේඛා තිබිය හැකිය. බාහිර ප්‍රභවයන්ගෙන් ලබාගත් HTML විග්‍රහ කිරීමේදී ඔබ $ .parseHTML () භාවිතා කරන ලෙස අපි තවමත් තරයේ අවවාද කරමු, අනාගතයේදී HTML විග්‍රහ කිරීමේදී තවදුරටත් වෙනස්කම් සිදු කරනු ඇත.

සත්‍ය ප්‍රශ්නයට සම්බන්ධ වීමට, සපයා ඇති උදාහරණය පහත පරිදි පරිවර්තනය කළ හැකිය:

this.$OuterDiv = $($.parseHTML('<div></div>'))
    .hide()
    .append($($.parseHTML('<table></table>'))
        .attr({ cellSpacing : 0 })
        .addClass("text")
    )
;

එය අවාසනාවකට සාධාරණ ලෙස භාවිතා කිරීමට වඩා පහසු නැත $(), නමුත් එය ඔබට වැඩි පාලනයක් ලබා දෙයි, උදාහරණයක් ලෙස ඔබට ස්ක්‍රිප්ට් ටැග් බැහැර කිරීමට තෝරා ගත හැකිය (එය පේළිගත ස්ක්‍රිප්ට් වැනි දේ ඉතිරි කරයි onclick):

> $.parseHTML('<div onclick="a"></div><script></script>')
[<div onclick=​"a">​</div>​]

> $.parseHTML('<div onclick="a"></div><script></script>', document, true)
[<div onclick=​"a">​</div>​, <script>​</script>​]

එසේම, නව යථාර්ථයට ගැලපෙන ඉහළ පිළිතුරේ මිණුම් ලකුණක් මෙන්න:

JSbin සබැඳිය

jQuery 1.9.1

  $ .පාර්ස්එච්ටීඑම්එල්: මීටර් 88 යි
  $ (par. parseHTML): 240ms
  <div> </div>: 138ms
  <div>: 143ms
  createElement: 64ms

එය parseHTMLවඩා බොහෝ සමීප බව createElementපෙනේ $(), නමුත් ප්‍රති j ල නව jQuery වස්තුවකට එතීමෙන් පසු සියලු තල්ලුව නැති වී යයි



6
var div = $('<div/>');
div.append('Hello World!');

JQuery හි DIV අංගයක් නිර්මාණය කිරීමට ඇති කෙටිම / පහසුම ක්‍රමය වේ.


5

මම ඒ සඳහා කුඩා jQuery ප්ලගිනයක් සාදා ඇත: https://github.com/ern0/jquery.create

එය ඔබගේ වාක්‍ය ඛණ්ඩය අනුගමනය කරයි:

var myDiv = $.create("div");

DOM node ID දෙවන පරාමිතිය ලෙස දැක්විය හැකිය:

var secondItem = $.create("div","item2");

එය බරපතලද? නැත, නමුත් මෙම වාක්‍ය ඛණ්ඩය $ ("<div> </div>") ට වඩා හොඳයි, එය එම මුදල් සඳහා ඉතා හොඳ අගයක්.

මම නව jQuery පරිශීලකයෙක්, DOMAssistant වෙතින් මාරු වෙමි, එයට සමාන කාර්යයක් ඇත: http://www.domassistant.com/documentation/DOMAssistantContent-module.php

මගේ ප්ලගිනය වඩාත් සරල ය, දම්වැල් ක්‍රම මඟින් එකතු කිරීම සහ අන්තර්ගතය එකතු කිරීම වඩා හොඳ යැයි මම සිතමි:

$("#container").append( $.create("div").addClass("box").html("Hello, world!") );

එසේම, එය සරල jQuery-plugin (100 වන එක) සඳහා හොඳ උදාහරණයකි.


4

මේ සියල්ලම කෙළින්ම ඉදිරියට! ඉක්මන් උදාහරණ කිහිපයක් මෙන්න ...


var $example = $( XMLDocRoot );

var $element = $( $example[0].createElement('tag') );
// Note the [0], which is the root

$element.attr({
id: '1',
hello: 'world'
});

var $example.find('parent > child').append( $element );

2

පෙර පිළිතුරු වල සඳහන් කර නැත, එබැවින් මම නවතම jQuery සමඟ මූලද්‍රව්‍ය මූලද්‍රව්‍ය නිර්මාණය කරන්නේ කෙසේද යන්නත්, අන්තර්ගතය, පන්තිය හෝ ඔන්ක්ලික් කෝල්බැක් වැනි අමතර ගුණාංග සමඟ වැඩ කරන උදාහරණ එකතු කරමි:

const mountpoint = 'https://jsonplaceholder.typicode.com/users'

const $button = $('button')
const $tbody = $('tbody')

const loadAndRender = () => {
  $.getJSON(mountpoint).then(data => {

    $.each(data, (index, { id, username, name, email }) => {
      let row = $('<tr>')
        .append($('<td>', { text: id }))
        .append($('<td>', {
          text: username,
          class: 'click-me',
          on: {
            click: _ => {
              console.log(name)
            }
          }
        }))
        .append($('<td>', { text: email }))

      $tbody.append(row)
    })

  })
}

$button.on('click', loadAndRender)
.click-me {
  background-color: lightgrey
}
<table style="width: 100%">
  <thead>
    <tr>
      <th>ID</th>
      <th>Username</th>
      <th>Email</th>
    </tr>
  </thead>
  <tbody>
  
  </tbody>
</table>

<button>Load and render</button>

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>


-2

jQuery කොටුවෙන් පිටත createElement එකකට සමාන නොවේ. ඇත්ත වශයෙන්ම jQuery හි බහුතරයක් අභ්‍යන්තරව සිදු කරනුයේ පිරිසිදු DOM හැසිරවීමට වඩා අභ්‍යන්තර HTML භාවිතා කරමිනි. ඉහත සඳහන් කළ ආදම් ඔබට සමාන ප්‍රති .ල ලබා ගත හැකි ආකාරය මෙයයි.

අභ්‍යන්තර HTML හරහා ඇපෙන්ඩ් ඩොම් , ඩොමෙක් සහ ෆ්ලයිඩොම් වැනි ඩොම් භාවිතා කරන ප්ලගීන කිහිපයක් තිබේ. කාර්ය සාධනය අනුව ස්වදේශීය jquery තවමත් වඩාත්ම ක්‍රියාකාරී වේ (ප්‍රධාන වශයෙන් එය අභ්‍යන්තර HTML භාවිතා කරයි)


5
ඔබ යාවත්කාලීන විය යුතුය. jQuery අභ්‍යන්තර HTML භාවිතා නොකරන නමුත් HTML නූල් විග්‍රහ කරන අතර document.createElement () භාවිතා කරමින් අභ්‍යන්තරව DOM ගසක් සාදයි. මෙය මූලික jQuery ය.
වින්සන්ට් රොබට්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.