gpt4 book ai didi

javascript - 将方法应用于变量

转载 作者:行者123 更新时间:2023-11-29 17:16:08 25 4
gpt4 key购买 nike

我正在尝试向要使用的变量添加一个方法,如下所示;

var method = ".wrap";   
jQuery('.container')+[method]+("<div>Hello World</div>");

本质上它应该做的是;

jQuery('.container').wrap("<div>Hello World</div>");

但是它不起作用,没有错误,页面中没有添加 hello world div。这是原始问题 http://goo.gl/MQ2tr ,我想我用更简单的术语再问一遍。

更新只要我在变量中有一个方法,它就可以很好地使用方括号表示法,但是我需要使用类似 .parent().parent().wrap() 我怎样才能让它工作?我尝试删除所有的点,但我只是得到一个错误 Uncaught TypeError: Object [object Object] has no method 'parent()parent()wrap'

这是我的列表表单现在的样子

 <select name="lu_ban_data[method]" id="lu_ban_data" />
<option value="append">Append</option>
<option value="prepend">Prepend</option>
<option value="wrap">Wrap</option>
<option value="parent()parent()wrap">Parent</option>
</select>

最佳答案

就这样写吧

var method = "wrap";   
jQuery('.container')[method]("<div>Hello World</div>");

您可以通过两种方式访问​​对象的属性。通过点符号方括号符号

 obj.property
obj['property']

var propName = "property"
obj[propName]

编辑

这里是 MDN 的链接 Member Operators

对您的代码的作用的简短说明:

  jQuery('.container')+[method]+("<div>Hello World</div>");

是3个元素的加法:

  1. jQuery('.container')的结果集
  2. Array包含一个元素 [method]
  3. String "<div>Hello World</div>"

这个结果取决于实现,但很可能是这样的:

"[object Object].wrap<div>Hello World</div>"
+-------------+
+---+
+--------------------+

结果看起来是这样的,因为 JavaScript 引擎通常调用 toString如果他们不能以其他方式添加它们,则在元素上。

编辑

已编辑问题的更新:

 element.parent().parent().wrap()

例如等于:

 element['parent']()['parent']().wrap()

 element['parent']().parent()['wrap']()

或任何其他组合 ob dotbrace notation

你想代表.parent().parent().wrap()作为一个字符串并将其用作访问。但这不会那样工作。 点符号大括号符号 仅返回给定元素的属性。所以parent()返回 parentjQuery('.container')在这个返回的对象上调用 parant()在返回的对象上调用 wrap()

所以(假设只有你的最后一个函数调用有参数)你需要这样的东西:

function chainedFunctionCall( obj, chain, arguments) {
var curr = obj;
var splitChain = chain.split("."); //split the 'call chain' passed a strings by '.' (the dot in the string has nothing to do with the dot notation)

//iterate over the resulting array (except the last one where we need to pass the arguments to
for( var i=0 ; i<splitChain.length-1 ; i++ ) {
//call the function by the given name in the chain and store the result as current object
curr = curr[splitChain[i]]();
}

//when we reached the last name in the chain call that function using `apply` so that we can pass the arguments we got as array to the function call, and call it in the context of the current object.
return curr[splitChain[i]].apply(curr,arguments);
}


var obj = $(".container");
var callChain = "parent.parent.wrap";


chainedFunctionCall( obj, callChain, ["<div>your argument you pass there</div>"]);

关于javascript - 将方法应用于变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17657919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com