可能重复:
克隆JavaScript对象的最有效方法是什么?
这也被称为"深度复制",我发现了一些文章.最接近的似乎是这个,但是它适用于jQuery - 我试图在没有库的情况下这样做.
我也在两个地方看到过这样的事情:
arr2 = JSON.decode(JSON.encode(arr1));
Run Code Online (Sandbox Code Playgroud)
但这显然效率低下.也可以单独循环和复制每个值,并在所有数组中重复.这看起来很累人也很低效.
那么复制JavaScript多维数组的最有效的非库方式是[[a],[b],[c]]
什么?如果有必要,我对"非IE"方法非常满意.
谢谢!
他看起来像是一个快速回答的东西,但我找不到一个.也许我在搜索错误的条款?没有图书馆,虽然我不需要跨浏览器的后备,但我的目标是该项目的所有最新版本.
我得到了一些元素:
element = document.querySelectorAll(".someselector");
Run Code Online (Sandbox Code Playgroud)
YEY!
如何删除这些元素?我错过了什么?我是否必须遍历它们并做这element.parentNode.removeChild(element);
件事,或者是否有一个我缺少的简单功能?
当开发工具处于活动状态时,Google Chrome会显示灰色圆圈光标.为什么会发生这种情况?如何停止?
是否可以捕获对象的(任何)属性何时被访问或尝试访问?
例:
我创建了自定义对象 Foo
var Foo = (function(){
var self = {};
//... set a few properties
return self;
})();
Run Code Online (Sandbox Code Playgroud)
然后有一些行动反对Foo
- 有人试图访问财产bar
Foo.bar
Run Code Online (Sandbox Code Playgroud)
是否有方法(原型,也许)捕获这个?bar
可能未定义Foo
.我可以捕获任何尝试访问未定义属性的功能.
例如,如果bar
未定义Foo
,并且Foo.bar
尝试了,例如:
Foo.prototype.undefined = function(){
var name = this.name; //name of property they attempted to access (bar)
Foo[name] = function(){
//...do something
};
return Foo[name];
}
Run Code Online (Sandbox Code Playgroud)
但功能性,不像我的例子.
概念
Foo.* = function(){
}
Run Code Online (Sandbox Code Playgroud)
背景
如果我有自定义函数,每次调用此函数时都可以监听(见下文).只是想知道是否有可能获得财产.
Foo = function(){};
Foo.prototype.call = function(thisArg){
console.log(this, thisArg);
return this; …
Run Code Online (Sandbox Code Playgroud) 这很可能已经是某个地方的问题了,但我无法找到它,因为每次搜索都会出现jQuery问题.
我正在寻找一种经过验证的方法来绑定到准备好的文档,就像jQuery一样$(document).ready()
.但是,这是一个"仅限现代浏览器"页面,具有非常轻量级的JavaScript,我想避免在这里加载jQuery.
有人会指出我正确的方向吗?
谢谢!
我有一系列值:
['a', 'b', 'c', 'd']
Run Code Online (Sandbox Code Playgroud)
我需要将这些作为参数传递给函数:
window.myFunction('a', 'b', 'c', 'd');
Run Code Online (Sandbox Code Playgroud)
如果我可以将数组/对象传递给函数,这会更容易,但函数是由其他人编写的或者已经存在而且我无法更改它们 - 它们需要作为单独的参数传递,这是我需要解决的问题.
传递的值的数量不一致.它可能是一个,可能是100个.
再次,我不能影响功能.它们就是这样,我总会收到一系列值传递给它们.
我有一个dom对象,我想把它的父母,所有的父母,与选择器相匹配querySelectAll()
,但是对于父母而不是孩子.类似于jQuery的.parents('selector')方法,但我不需要任何后向兼容性.另外,请不要图书馆.我将取一个布尔返回值.
我可以自己写这个作为递归函数/ for/while使用matchesSelector()
.我正在寻找鲜为人知的方法或更有效的代码.
保存任何处理都是值得的.想想成千上万的匹配检查,甚至更多.
我正在尝试用文档片段替换元素的所有内容:
var frag = document.createDocumentFragment()
文档片段正在创建中.没有问题.我添加元素就好了,也没有问题.我可以使用它来附加它element.appendChild(frag)
.这也很好用.
我正在尝试创建一个类似于jQuery HTML的"替换"方法.我并不担心旧的浏览器兼容性.是否有一个神奇的功能来替换元素的所有内容?
我已经尝试过element.innerHTML = frag.cloneNode(true)
,(根据我能找到的每个 '替换元素内容'维基),这不起作用.它给了我<div>[object DocumentFragment]</div>
.
请不要图书馆.这意味着如果你把一个jQuery解决方案作为答案,你就会被投票.不是想成为一个混蛋,但它发生在每一次.
谢谢!
编辑 为了清楚起见,我正在寻找一个"神奇"的解决方案,我知道如何一次删除所有现有元素,然后附加我的片段.
这是其中一个看起来如此简单,但我无法想出一个很好的方法来解决它.
我有一个节点,也许nodelist = document.getElementById("mydiv");
- 我需要将其规范化为节点列表.而不是一个数组:一个真实的,真正的nodeList
对象.
不 nodelist = [document.getElementById("mydiv")];
请不要图书馆.
请不要图书馆.超出我的控制.
我正在向dom附加一个文档片段.这一切都有效.没问题.
在附加片段后如何保留/检索节点列表?相关代码:
var frag = document.createDocumentFragment();
//add some content to the fragment
element.appendChild(frag);
Run Code Online (Sandbox Code Playgroud)
再次,这是有效的!我不需要对如何添加东西到dom进行故障排除!
如果我设置var e = element.appendChild(frag);
,所有内容都会正常附加,但e
= =一个空文档片段.
我在这里寻找一些光滑的魔法伏都教.不要让我循环整个dom.内容可以是任何东西,一个或多个有或没有孩子的节点.如果有一些querySelectorAll的技巧或可以接受的东西.
谢谢!
编辑
在进一步调用时,看起来e
上面实际上是对frag
var 的返回引用,在将其附加到dom之后为空.这就像元素整齐地滑出片段进入dom一样,片段就是空洞的.