ID මගින් මූලද්‍රව්‍යය ඉවත් කරන්න


1150

සම්මත ජාවාස්ක්‍රිප්ට් සහිත මූලද්‍රව්‍යයක් ඉවත් කිරීමේදී, ඔබ පළමුව එහි මවුපියන් වෙත යා යුතුය:

var element = document.getElementById("element-id");
element.parentNode.removeChild(element);

මුලින් මව් නෝඩයට යෑම මට ටිකක් අමුතු දෙයක් ලෙස පෙනේ, ජාවාස්ක්‍රිප්ට් මේ ආකාරයට ක්‍රියා කිරීමට හේතුවක් තිබේද?


544
ජේම්ස් පැවසූ පරිදි, වස්තුවක් කෙලින්ම ඉවත් කිරීමට DOM සහාය නොදක්වයි. ඔබ එහි මවුපියන් වෙත ගොස් එය එතැනින් ඉවත් කළ යුතුය. මූලද්‍රව්‍යයක් සියදිවි නසා ගැනීමට ජාවාස්ක්‍රිප්ට් ඉඩ නොදේ, නමුත් එය ළදරු icide ාතනයට අවසර දෙයි ...
මාර්ක් හෙන්ඩර්සන්

21
හේතුවක් තිබේද? රිචඩ් ෆේන්මන් පවසන්නේ නැත . (ඔබ කිසියම් ගස්-ව්‍යුහ වැඩසටහන් ලියා ඇත්දැයි බැලීමට තාක්ෂණික සාධාරණීකරණය පහසුය. කෙසේ හෝ දරුවා දෙමව්පියන් වෙත දැනුම් දිය යුතුය. , එය ඔබටම නිර්වචනය කිරීමට පහසු කාර්යයක් පමණි.)
kizzx2

6
මා දකින එකම හේතුව වන්නේ සෑම විටම xml / xhtml ලේඛනයක මූල මූලද්‍රව්‍යයක් තිබීමයි, එබැවින් මවුපියන් නොමැති නිසා ඔබට එය ඉවත් කිරීමට නොහැකි වනු ඇත
ඇලෙක්ස් කේ

5
මම ජොහාන්ගේ ක්‍රියාකාරීත්වයට බෙහෙවින් කැමතියි , එම කාර්යයන් දේශීයව ලබා නොදෙන්නේ මන්දැයි මට විශ්වාස නැත. නරඹන්නන්ගේ සංඛ්‍යාව අනුව, එය ඉතා පොදු මෙහෙයුමකි.
සාස්

12
ඔබට element.remove()ES5 ලෙස කෙලින්ම භාවිතා කළ හැකිය . ඔබට මවුපියන් අවශ්‍ය නැත!
ගිබෝල්ට්

Answers:


671

දේශීය DOM කාර්යයන් වැඩි දියුණු කිරීම සැමවිටම හොඳම හෝ වඩාත්ම ජනප්‍රිය විසඳුම නොවන බව මම දනිමි, නමුත් මෙය නවීන බ්‍රව්සර් සඳහා හොඳින් ක්‍රියා කරයි.

Element.prototype.remove = function() {
    this.parentElement.removeChild(this);
}
NodeList.prototype.remove = HTMLCollection.prototype.remove = function() {
    for(var i = this.length - 1; i >= 0; i--) {
        if(this[i] && this[i].parentElement) {
            this[i].parentElement.removeChild(this[i]);
        }
    }
}

එවිට ඔබට මේ වගේ අංග ඉවත් කළ හැකිය

document.getElementById("my-element").remove();

හෝ

document.getElementsByClassName("my-elements").remove();

සටහන: මෙම විසඳුම IE 7 සහ ඊට පහළින් ක්‍රියා නොකරයි. DOM දීර් ing කිරීම පිළිබඳ වැඩි විස්තර සඳහා මෙම ලිපිය කියවන්න .

සංස්කරණය කරන්න : 2019 දී මගේ පිළිතුර සමාලෝචනය node.remove()කිරීම, ගලවා ගැනීමට පැමිණ ඇති අතර එය පහත පරිදි භාවිතා කළ හැකිය (ඉහත පොලිෆිල් නොමැතිව):

document.getElementById("my-element").remove();

හෝ

[...document.getElementsByClassName("my-elements")].map(n => n && n.remove());

මෙම කාර්යයන් සියලුම නවීන බ්‍රව්සර්වල ඇත (IE නොවේ). MDN පිළිබඳ වැඩිදුර කියවන්න .


3
එය විය යුතු නොවේ [document.getElementsByClassName ("my-element") [0] .remove (); ] මම හිතන්නේ ඉවත් කිරීමේ ශ්‍රිතය අරා මඟින් ක්‍රියාත්මක නොවේ. පංතියක සියලුම අංග ඉවත් කිරීමට හෝ අරාව නැවත ලබා දෙන ඕනෑම තේරීම් කාරකයකට, ඔබට සියලු අංග හරහා නැවත යෙදිය යුතු අතර එක් එක් මත ඉවත් කරන්න () අමතන්න.
සෙඩාත් කිලින්ක්

1
EdSedatKilinc, ඔබ ඇත්ත ස්නිපටය උත්සාහ කළාද? අරා සම්බන්ධ නැත, නමුත් ඒ වෙනුවට NodeListහෝ HTMLCollectionඅරාව වැනි මූලද්‍රව්‍ය සමූහයකි. දෙවන ක්‍රම නිර්වචනය මඟින් මෙම “මූලද්‍රව්‍ය කට්ටල” ඉවත් කිරීමට ඉඩ ලබා දේ.
ජොහාන් ඩෙට්මාර්

1
මෙය ක්‍රෝම් කොන්සෝලය තුළ ක්‍රියාත්මක කිරීමෙන් පෙනෙන්නේ එක් වරකදී එක් අංගයක් මකා දැමීමයි document.getElementsByClassName("my-elements").remove();. සංස්කරණය කරන්න: ඇත්ත වශයෙන්ම එය පොකුරක් මකා දැමූ නමුත් අවසන් කිරීමට නැවත ධාවනය කිරීම අවශ්‍ය වේ. "අදහස්-පිටපත" පන්තිය සමඟ මෙම පිටුවේ එය උත්සාහ කරන්න.
ඩැනියෙල්ස්ට්

2
ඔයා හරි, මගේ නරක. මූලද්‍රව්‍ය හරහා පසුපසට ලූප් කිරීම සඳහා මම ශ්‍රිතය වෙනස් කළෙමි. හොඳින් වැඩ කරන බවක් පෙනේ. ඔබ කතා කරන හැසිරීම බොහෝ විට සිදුවන්නේ යාවත්කාලීන වූ දර්ශක මගිනි.
ජොහාන් ඩෙට්මාර්

1
මෙය නොකරන්න. භාෂාව අදහස් කරන ආකාරයට අයිතම ඉවත් කරන්න. එක්ස්එම්එල් විග්‍රහ කිරීම ගැන හුරුපුරුදු ඕනෑම කෙනෙකුට ළමයින් මකා දැමීමට දෙමව්පියන් වෙත යාමේ අවශ්‍යතාවය හඳුනාගත හැකිය. HTML යනු XML (වර්ග කිරීම) හි සුපිරි කට්ටලයකි.
Hal50000

286

හරස් බ්‍රව්සරය සහ IE> = 11:

document.getElementById("element-id").outerHTML = "";

3
මෙය සරලම, විශ්වාසදායක හා වේගවත්ම විසඳුම ලෙස පෙනේ. මට මූලද්රව්යය මකා දැමීමට අවශ්ය නැත, එබැවින් මම අන්තිම පේළිය මඟ හැරියෙමි, නමුත් එය කිසිදු ආකාරයකින් ඉහළට එකතු නොකළ යුතුය .. සටහන : ටැග් වලට වඩා $.readyjs විකල්පයක් සොයා ගැනීමට උත්සාහ කරන අතරතුර මම මෙය සොයා ගතිමි noscript. මට අවශ්‍ය ආකාරයට එය භාවිතා කිරීම සඳහා, මට එය 1ms setTimeoutශ්‍රිතයකින් ඔතා තැබීමට සිදු විය . මෙය මගේ සියලු ගැටලු එකවර විසඳයි. ග්‍රේසියස්.
dgo

මතක තබා ගන්න outerHTMLතවමත් ප්‍රමිතියට නව (er) එකතු කිරීමකි. ඔබ ලියන අවස්ථාවේ ඕනෑම මෘදුකාංගයක්> 6 සඳහා සහය සොයන්නේ නම්, ඔබට වෙනත් විසඳුමක් අවශ්‍ය වේ. මෙම removeඅන් අය විසින් සඳහන් කාර්යය සමාන නඩුව වේ. සුපුරුදු පරිදි පොලිෆිල් එකක් ක්‍රියාත්මක කිරීම ආරක්ෂිතයි.
සුපර් කැට්

delete element) ඔබ සඳහා පරීක්ෂා කරන්න එය විසින් වැඩ කරන්නේ නැත; ඔබ JS දී delete විචල්ය, යතුරු පමණක් නොව හැකි කිසිවක් කර නැත console.log(element)පසු delete element...
අයිවන් Kleshnin

2
මෙය removeChild(මගේ පද්ධතියේ 6-7% පමණ) වඩා ටිකක් මන්දගාමී වේ . Jsperf.com/clear-outerhtml-v-removechild/2
ඇලෙජැන්ඩ්‍රෝ ගාර්ෂියා

1
ඔබ ඉවත් කිරීමට උත්සාහ කරන්නේ නම් මෙය අයිෆ්‍රේම් භාවිතා කළ ඉඩක් ඉතිරි කරයි.
lacostenycoder

169

ඔබට removeසෑම විටම ඒ ගැන සිතීමට අවශ්‍ය නොවන පරිදි ඔබට ශ්‍රිතයක් කළ හැකිය :

function removeElement(id) {
    var elem = document.getElementById(id);
    return elem.parentNode.removeChild(elem);
}

12
ඔබ ගෝලීය යන්නේ නැතිව එක්-ලයිනර් ඔබට අවශ්ය නම්, ඔබට වෙනස් කළ හැකිය elemකිරීමට remove.elem. එමගින් ශ්‍රිතය යොමු වන බැවින් ඔබට වෙනත් ගෝලීය විචල්‍යයක් නිර්මාණය කිරීමට අවශ්‍ය නොවේ. :-)
twiz

4
ඉතින්, ඔබ එලිම් එක ආපසු ලබා දිය යුත්තේ ඇයි? ඇයි නැත්තේfunction remove(id) { document.getElementById(id).parentNote.removeChild(document.getElementById(id)); }
Zach Lysobey

5
Ach ZachL: ඔබේ විසඳුම වඩාත් පැහැදිලිව පෙනෙන අතර, එය DOM සෙවීම් දෙකක් සිදු කරයි, එය මන්දගාමී වන අතර අනෙක් විසඳුම් වළක්වා ගැනීමට අවශ්‍ය බව පෙනේ.
Wk_of_Angmar

3
වැඩ කරන්නේ නෑ. බොහෝ දෝෂ. මෙය ක්‍රියාත්මක වේ: var elem = document.getElementById ('id'); elem.parentNode.removeChild (elem);
මිච් තරගය

2
වාව්, ඇයි මෙතරම් සංකීර්ණ. හැඳුනුම්පතක් වෙනුවට මූලද්‍රව්‍යය ශ්‍රිතයට යොමු කරන්න. මේ ආකාරයෙන් මූලද්‍රව්‍යයට සම්පූර්ණ ශ්‍රිතයට ප්‍රවේශ විය හැකි අතර එය එක් ලයිනර් එකක රැඳේ
ඩේවිඩ් ෆරීසා

98

එය DOM සහාය දක්වයි . "ඉවත් කරන්න" හෝ "මකන්න" සඳහා එම පිටුව සොයන්න සහ ඉවත් කරන්න චිල්ඩ් යනු නෝඩයක් ඉවත් කරන එකම එකකි.


14
එය මගේ මුල් ප්‍රශ්නයට පිළිතුරු සපයයි, නමුත් ජාවාස්ක්‍රිප්ට් මේ ආකාරයට ක්‍රියා කරන්නේ ඇයි?
සාස්

5
මම මෙතන අනුමාන කරනවා, නමුත් මම හිතන්නේ එය මතක කළමනාකරණය හා සම්බන්ධයි. මව් නෝඩය බොහෝ විට ළමා නෝඩ් වෙත දර්ශක ලැයිස්තුවක් තබා ඇත. ඔබ නිකම්ම නෝඩ් එකක් මකා දැමුවහොත් (දෙමව්පියන් භාවිතා නොකර), දෙමව්පියන් තවමත් දර්ශකය රඳවාගෙන මතක කාන්දු වීමට හේතු වේ. එම නිසා දරුවා මකාදැමීම සඳහා දෙමව්පියන්ට ශ්‍රිතයක් කැඳවීමට api ඔබට බල කරයි. මෙයද කදිමයි, මන්ද එය ළමා නෝඩ් හරහා ගස දිගේ ඇවිද යා හැකි අතර ඒ සෑම එකක්ම ඉවත් කරන්න, නමුත් මතකය කාන්දු නොවේ.
චැඩම්ස්

2
හේයි යාලුවනේ, එම සඳහනට මෙය නොමැති වුවද, මම එය අහම්බෙන් සොයා ගතිමි. ලිවීම element.remove();වැඩ කරනු ඇත. සමහර විට එය අලුත් දෙයක් විය හැකිය. නමුත් පළමු වරට මට එය ක්‍රියාත්මක වේ. මම හිතන්නේ එය සෑම විටම වැඩ කළ යුතුව තිබුනේ එය ඉතා මූලික දේවල් තිබිය යුතු බැවිනි.
මුහම්මද් උමර්

1
නමුත් එය IE7 සහ ඊට පහළින් ක්‍රියා නොකරයි. IE7 සහ පහළින්, ඉවත් කරන්න () ක්‍රියා නොකරයි
fanfan1609

1
මට අනුමාන කිරීමට සිදුවුවහොත්, එය මේ ආකාරයට ක්‍රියා කිරීමට හේතුව DOM මූලද්‍රව්‍යයන්ට තමන්ව ඉවත් කළ නොහැකි වීමයි. ඔබ හිතෝපදේශ කාපට් එක පාද යටින් ඉවත් කරනවා. ඔබ එය කන්ටේනරයෙන් ඉවත් කළ යුතුය. අවම වශයෙන් මම ඒ ගැන සිතීමට උත්සාහ කරන්නේ එලෙස ය.
ෆිල්ට්

82

DOM සංවිධානය කර ඇත්තේ නෝඩ් ගසක වන අතර, සෑම නෝඩයකම වටිනාකමක් ඇති අතර එහි ළමා නෝඩ් වෙත යොමු ලැයිස්තුවක් ඇත. එබැවින් element.parentNode.removeChild(element)අභ්‍යන්තරව සිදුවන්නේ කුමක්ද යන්න හරියටම අනුකරණය කරයි: පළමුව ඔබ මව් නෝඩයට යන්න, ඉන්පසු ළමා නෝඩයට යොමු කිරීම ඉවත් කරන්න.

DOM4 වන විට, එකම දේ කිරීමට සහායක ශ්‍රිතයක් සපයනු ලැබේ : element.remove(). මෙය බ්‍රව්සර් වලින් 87% ක් තුළ ක්‍රියාත්මක වේ (2016 වන විට), නමුත් IE 11 නොවේ. ඔබට පැරණි බ්‍රව්සර් සඳහා සහාය වීමට අවශ්‍ය නම්, ඔබට:


2
කරුණාකර "ස්වදේශික DOM කාර්යයන් වෙනස් නොකරන්න " .
එමිලි බර්ජරන්

36

එක් අංගයක් ඉවත් කිරීම සඳහා:

 var elem = document.getElementById("yourid");
 elem.parentElement.removeChild(elem);

උදාහරණයක් ලෙස කිසියම් පන්ති නාමයක් සහිත සියලුම අංග ඉවත් කිරීම සඳහා:

 var list = document.getElementsByClassName("yourclassname");
 for(var i = list.length - 1; 0 <= i; i--)
 if(list[i] && list[i].parentElement)
 list[i].parentElement.removeChild(list[i]);

පවත්නා පිළිතුරු වලින් මෙය හොඳින් ආවරණය වේ.
කයිල්මිට්

4
+1 පන්ති නාමයෙන් ඉවත් කිරීම පිළිබඳ සරල උදාහරණයක් සඳහා. මෙය අනෙක් පිළිතුරු වලින් හොඳින් ආවරණය නොවේ
ලුයිස් එග්ල්ටන්

if(list[i] && list[i].parentElement)රේඛාව අවශ්‍ය වන්නේ ඇයි ? එක් එක් මූලද්‍රව්‍යයේ පැවැත්ම එය getElementsByClassNameක්‍රමවේදය මගින් ආපසු ලබා දුන් බවට සහතික නොවේද?
ජල තාප

අවාසනාවකට මෙන් මා දන්නා තරමින් පැවැත්ම සහතික නොවේ, නමුත් මම ඒ පිළිබඳ විස්තර නොදනිමි. මම වරක් අමුතු නිර්වචනය නොකළ හෝ ශුන්‍ය වටිනාකමක් අත්විඳ ඇති අතර, වැඩිදුර විමර්ශනයකින් තොරව මම එම චෙක්පත එහි තැබුවෙමි. ඉතින් මේක ටිකක් හැක්.
csjpeter

එය විය යුතුයdocument.getElementsByClassName(...
සේවක

22

ඔබට භාවිතා කළ හැකිය element.remove()


13
element.remove()ජාවාස්ක්‍රිප්ට් වලංගු නොවන අතර ක්‍රෝම් වැනි සමහර බ්‍රව්සර් වල පමණක් ක්‍රියාත්මක වේ .
Zaz

4
ජොෂ්, එය වලංගු ජාවාස්ක්‍රිප්ට් එකක් වන අතර ෆයර්ෆොක්ස් සහ ක්‍රෝම් පමණක් එය ක්‍රියාත්මක කර ඇත (එම්ඩීඑන් බලන්න)
ටිම් ගුයීන්

10
මගේ නරක, element.remove() ඇත DOM4 ද වලංගු JavaScript , සහ ස්වභාවිකව Internet Explorer හි හැර, සියලු නවීන බ්රවුසරයන් ක්රියා කරයි.
Zaz

25
ෆයර්ෆොක්ස් සහ ක්‍රෝම් හි හොඳින් ක්‍රියා කරයි. IE ගැන සැලකිලිමත් වන
අරුන් ෂර්මා

13
රැකියා ඇති පුද්ගලයින් IE ගැන සැලකිලිමත් වේ!
sqram

18

මෙම ChildNode.remove()ක්රමය සහ එයට අයත් ගස් වලින් වස්තුව ඉවත් කරයි.

https://developer.mozilla.org/en-US/docs/Web/API/ChildNode/remove

මෙන්න ඔබට ඇමතුමක් ගත හැකි ආකාරය පෙන්වන ෆෙඩෙල් එකකි document.getElementById('my-id').remove()

https://jsfiddle.net/52kp584L/

**

NodeList දීර් extend කිරීමේ අවශ්‍යතාවයක් නොමැත. එය දැනටමත් ක්රියාත්මක කර ඇත.

**


2
සටහන, IE හි කිසිදු අනුවාදයක මෙය සහාය නොදක්වයි!
මැක්‍රෝමන්

1
ඔබ තවමත් IE සඳහා සංවර්ධනය කරන්නේ නම් මට ඔබ ගැන බොහෝ කණගාටුයි.
ඇලෙක්ස් ෆලන්ස්ටෙඩ්

ඔබ IE සඳහා දියුණු නොවේද? ඔබේ ගනුදෙනුකරුවන් හෝ ගනුදෙනුකරුවන් ගැන මට කණගාටුයි.
මැක්‍රෝමන්

14

remove()DOM ක්‍රමය භාවිතා කිරීමෙන් ඔබට එම මූලද්‍රව්‍යය කෙලින්ම ඉවත් කළ හැකිය .

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

let subsWrapper = document.getElementById("element_id");
subsWrapper.remove();
//OR directly.
document.getElementById("element_id").remove();


7

මුලින් මව් නෝඩයට යෑම මට ටිකක් අමුතු දෙයක් ලෙස පෙනේ, ජාවාස්ක්‍රිප්ට් මේ ආකාරයට ක්‍රියා කිරීමට හේතුවක් තිබේද?

ශ්‍රිතයේ නම වන අතර removeChild(), දෙමව්පියන් නොමැති විට දරුවා ඉවත් කළ හැක්කේ කෙසේද? :)

අනෙක් අතට, ඔබ පෙන්වා ඇති පරිදි සෑම විටම එය ඇමතිය යුතු නැත. element.parentNodeදී ඇති නෝඩයේ මව් නෝඩය ලබා ගැනීමට සහායකයකු පමණි. ඔබ දැනටමත් මව් නෝඩය දන්නේ නම්, ඔබට එය මේ ආකාරයෙන් භාවිතා කළ හැකිය:

උදා:

// Removing a specified element when knowing its parent node
var d = document.getElementById("top");
var d_nested = document.getElementById("nested");
var throwawayNode = d.removeChild(d_nested);

https://developer.mozilla.org/en-US/docs/Web/API/Node/removeChild

============================================= =======

තවත් යමක් එකතු කිරීමට:

සමහර පිළිතුරු පෙන්වා දී ඇත්තේ භාවිතා කිරීම වෙනුවට parentNode.removeChild(child);ඔබට භාවිතා කළ හැකි elem.remove();බවයි. නමුත් මා දැක ඇති පරිදි, කාර්යයන් දෙක අතර වෙනසක් ඇති අතර, එම පිළිතුරු වල එය සඳහන් නොවේ.

ඔබ භාවිතා කරන්නේ නම් removeChild(), එය ඉවත් කළ නෝඩයට යොමු කිරීමක් ලබා දෙනු ඇත.

var removedChild = element.parentNode.removeChild(element); 
console.log(removedChild); //will print the removed child.

නමුත් ඔබ භාවිතා කරන්නේ නම් elem.remove();, එය ඔබට යොමු කිරීම ලබා නොදේ.

var el = document.getElementById('Example');
var removedChild = el.remove(); //undefined

https://developer.mozilla.org/en-US/docs/Web/API/ChildNode/remove

මෙම හැසිරීම ක්‍රෝම් සහ එෆ්එෆ් හි නිරීක්ෂණය කළ හැකිය. එය විශ්වාස කිරීම වටී යැයි මම විශ්වාස කරමි :)

මගේ පිළිතුර ප්‍රශ්නයට යම් වටිනාකමක් එක් කරන අතර එය ප්‍රයෝජනවත් වේ යැයි සිතමි !!


6

Ele.parentNode.removeChild (ele) භාවිතා කරන කාර්යයන් ඔබ විසින් සාදන ලද නමුත් තවමත් HTML තුළට ඇතුළත් කර නොමැති මූලද්‍රව්‍ය සඳහා ක්‍රියා නොකරනු ඇත. JQuery සහ මූලාකෘති වැනි පුස්තකාල එම සීමාව මගහරවා ගැනීම සඳහා පහත සඳහන් ක්‍රමවේදයන් wis ානවන්තව භාවිතා කරයි.

_limbo = document.createElement('div');
function deleteElement(ele){
    _limbo.appendChild(ele);
    _limbo.removeChild(ele);
}

මම හිතන්නේ ජාවාස්ක්‍රිප්ට් එලෙස ක්‍රියා කරන්නේ DOM හි මුල් නිර්මාණකරුවන් දෙමව්පියන් / ළමයින් සහ පෙර / ඊළඟ සංචාලනය අද එතරම් ජනප්‍රිය වී ඇති DHTML වෙනස් කිරීම් වලට වඩා ඉහළ ප්‍රමුඛතාවයක් ලෙස තබා ඇති බැවිනි. 90 දශකයේ මැද භාගයේ දී එක් <ආදාන වර්ගය = 'පෙළ'> වෙතින් කියවීමට හා DOM හි සාපේක්ෂ ස්ථානයකින් තවත් කෙනෙකුට ලිවීමට හැකිවීම ප්‍රයෝජනවත් විය. මෙය සමස්ත HTML ආකෘතිවල හෝ අන්තර්ක්‍රියාකාරී GUI මූලද්‍රව්‍යයන්ගේ ගතික පරම්පරාව යන්තම් දෙදරුම් කයි. සමහර සංවර්ධකයින්ගේ ඇස.


3

මුලින් මව් නෝඩයට යෑම මට ටිකක් අමුතු දෙයක් ලෙස පෙනේ, ජාවාස්ක්‍රිප්ට් මේ ආකාරයට ක්‍රියා කිරීමට හේතුවක් තිබේද?

IMHO: මේ සඳහා හේතුව මම වෙනත් පරිසරවල දැක ඇති ආකාරයටමයි: ඔබ යම් දෙයකට ඔබගේ “සබැඳිය” මත පදනම්ව ක්‍රියාවක් සිදු කරයි. ඔබ එයට සම්බන්ධ වී සිටියදී ඔබට එය මකා දැමිය නොහැක.

ගස් කකුලක් කපනවා වගේ. කපන අතරතුර ගසට කිට්ටුවෙන් වාඩි වී සිටින්න හෝ ප්‍රති result ලය වනු ඇත ... අවාසනාවන්ත (විහිලු වුවත්).


2

මෙය සැබවින්ම ෆයර්ෆොක්ස් වෙතින් පැමිණේ ... එක් වරක්, අයිඊ ඇසුරුමට වඩා ඉදිරියෙන් සිටි අතර මූලද්‍රව්‍යයක් කෙලින්ම ඉවත් කිරීමට ඉඩ දුන්නේය.

මෙය මගේ උපකල්පනය පමණි, නමුත් ඔබ දෙමව්පියන් හරහා දරුවෙකු ඉවත් කළ යුතු බවට හේතුව ෆයර්ෆොක්ස් විසින් යොමු කළ ආකාරය පිළිබඳ ගැටළුවක් බව මම විශ්වාස කරමි.

ඔබ වස්තුවක් සෘජුවම හරි-කරී කිරීමට කැඳවන්නේ නම්, එය මිය ගිය විගසම, ඔබ තවමත් එම සඳහන තබාගෙන සිටී. මෙය අප්රසන්න දෝෂ කිහිපයක් නිර්මාණය කිරීමේ විභවයක් ඇත ... එය ඉවත් කිරීමට අපොහොසත් වීම, එය ඉවත් කිරීම නමුත් වලංගු යැයි පෙනෙන යොමු කිරීම් තබා ගැනීම හෝ මතක කාන්දු වීම වැනි.

මම විශ්වාස කරන්නේ ඔවුන් ගැටලුව වටහා ගත් විට, එහි කර්තව්‍යය වූයේ එහි මූලද්‍රව්‍යය එහි මවුපියන් හරහා ඉවත් කිරීමයි. මන්ද එම මූලද්‍රව්‍යය නැති වූ විට, ඔබ දැන් දෙමව්පියන් වෙත යොමු කිරීමක් කර ඇති බැවිනි. මෙය සියලු අප්‍රසන්න භාවය නවත්වනු ඇති අතර (නිදසුනක් ලෙස ගස් නෝඩයක් නෝඩ් එකකින් වසා දැමුවහොත්) 'සිප්-අප්' වෙනුවට මනාව ගැලපේ.

එය පහසුවෙන් විසඳිය හැකි දෝෂයක් විය යුතුය, නමුත් වෙබ් ක්‍රමලේඛනයේ වෙනත් බොහෝ දේ මෙන්ම, නිකුතුව ඉක්මන් විය, මෙය මෙයට මඟ පෑදිය හැකිය ... ඊළඟ අනුවාදය පැමිණෙන විට, ප්‍රමාණවත් පුද්ගලයින් එය භාවිතා කරමින් සිටියේ මෙය වෙනස් කිරීම හේතු වනු ඇති බවයි කේත පොකුරක් කැඩීමට.

නැවතත්, මේ සියල්ල මගේ අනුමාන වැඩකි.

කෙසේ වෙතත්, වෙබ් ක්‍රමලේඛනය අවසානයේ සම්පූර්ණ වසන්ත පිරිසිදු කිරීමක් ලැබෙන දිනය දෙස මම බලා සිටිමි, මේ සියලු අමුතු කුඩා මෝඩකම් පිරිසිදු වන අතර සෑම දෙනාම එකම නීතිරීති අනුව සෙල්ලම් කිරීමට පටන් ගනී.

මගේ රොබෝ සේවකයා පසු වැටුප සඳහා නඩු පවරන දිනට පසු දින.


10
ෆයර්ෆොක්ස් මේ සඳහා වගකිව යුතු යැයි මට සැකයි. removeChildයනු DOM Level 1 Nodeඅතුරුමුහුණතේ ක්‍රමයකි .
ෆීලික්ස් ක්ලින්ග්

1

කෙටිම

මම සායි සුන්දර්ගේ පිළිතුර වැඩි දියුණු කරන්නේ OP හැඳුනුම්පත භාවිතා කරන නිසා getElementById:

elementId.remove();


0

මා තේරුම් ගත් පරිදි, නෝඩයක් කෙලින්ම ඉවත් කිරීම ෆයර්ෆොක්ස් හි ක්‍රියා නොකරයි, ඉන්ටර්නෙට් එක්ස්ප්ලෝරර් පමණි. එබැවින්, ෆයර්ෆොක්ස් සඳහා සහය දැක්වීමට, ඔබ දරුවා ඉවත් කිරීමට දෙමව්පියන් වෙත යා යුතුය.

Ref: http://chiragrdarji.wordpress.com/2007/03/16/removedelete-element-from-page-using-javascript-working-in-firefoxieopera/


7
එය ඇත්ත වශයෙන්ම මගේ ප්‍රශ්නයට පිළිතුරු නොදෙන අතර ඔබ සම්බන්ධ කළ පිටුව මගේ ප්‍රශ්නයට වඩා නරක විසඳුමක් සපයයි.
සාස්

0
// http://javascript.crockford.com/memory/leak.html
// cleans dom element to prevent memory leaks
function domPurge(d) {
    var a = d.attributes, i, l, n;
    if (a) {
        for (i = a.length - 1; i >= 0; i -= 1) {
            n = a[i].name;
            if (typeof d[n] === 'function') {
                d[n] = null;
            }
        }
    }
    a = d.childNodes;
    if (a) {
        l = a.length;
        for (i = 0; i < l; i += 1) {
            domPurge(d.childNodes[i]);
       }
    }
}

function domRemove(id) {
    var elem = document.getElementById(id);
    domPurge(elem);
    return elem.parentNode.removeChild(elem);
}

-3

ස්ක්‍රිප්ට් දෝෂයකින් තොරව මූලද්‍රව්‍යයක් ඉවත් කිරීමට හොඳම කාර්යය මෙයයි:

function Remove(EId)
{
    return(EObj=document.getElementById(EId))?EObj.parentNode.removeChild(EObj):false;
}

වෙත සටහන EObj=document.getElementById(EId).

මෙය එක සමාන ලකුණක් නොවේ ==.

මූලද්‍රව්‍යය EIdපවතින්නේ නම් ශ්‍රිතය එය ඉවත් කරයි, එසේ නොමැති නම් එය අසත්‍ය errorවේ.


4
ගෝලීය විචල්‍යයක් නිර්මාණය කරයි.
bjb568

1
එය තවත් පිළිතුරක නරකම අනුවාදයකි , නමුත් වසර 2 ක් ප්‍රමාදයි.
එමිලි බර්ජරන්
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.