如何在jQuery中的变量名之间切换并更改它们?
//predefined variables
var s1='';
var d2='';
//trying to change variables by .attr() parameter but no luck
$('body').on('click','span', function() {
var $(this).parent().attr('data-scan')=$(this).attr('id');
});
HTML
<div data-scan="s1"><span id="banana">Banana</span><span id="apple">Apple</span></div>
<div data-scan="d2"><span id="orange">Orange</span><span id="apple">Apple</span></div>
如何更改特定变量?我不关心改变attr papameter,我只需要更改预定义的全局var参数!
答案 0 :(得分:2)
您使用的是attr()
的错误语法语法:attr(attributeName,value)
更改
var $(this).parent().attr('data-scan')=$(this).attr('id');
要
$(this).closest('div').attr('data-scan',$(this).attr('id'));
您的代码将是
<强> Live Demo 强>
$('body').on('click','span', function() {
debugger
$(this).closest('div').attr('data-scan',$(this).attr('id'));
s1=$(this).closest('div').attr('data-scan');
alert(s1);
});
答案 1 :(得分:1)
首先,您的data-scan
属性的html错误,您没有收尾报价。
其次,您可以使用data()
jquery函数来访问data
属性。
第三,您无法使用=
运算符设置值。
你想要这样的东西:
$(this).parent().data('scan', $(this).attr('id'));
或没有data()
功能:
$(this).parent().attr('data-scan', $(this).attr('id'));
要获得该值,您可以执行以下操作之一:
var dataScan = $(this).parent().data('scan');
或
var dataScan = $(this).parent().attr('data-scan');
您的确切要求,用于根据数据扫描值设置变量
根据您的评论和代码,我认为您还不清楚自己要做什么。我想我已经解决了,你想使用data-scan
值来确定应该设置哪个全局变量......
//predefined variables
var s1='';
var d2='';
$('body').on('click','span', function() {
var variableType = $(this).parent().data('scan');
var valueToSet = $(this).attr('id');
if(variableType == "s1"){
s1 = valueToSet;
}
else if(variableType == "d2"){
d2 = valueToSet;
}
});
Here is an example我认为你要做的事情。
但是,如果你有很多变量,那么使用这么多if / else语句并不理想。所以你可以使用javascript eval()
函数。
var variableType = $(this).parent().data('scan');
var valueToSet = $(this).attr('id');
eval("" + variableType + " = '" + valueToSet + "';");
但请注意,您的eval代码会受到用户注入的值(不管javascript是否安全,无论如何)
答案 2 :(得分:0)
你非常接近!
// set
$('#item').attr('data-scan', 'set new value');
// get
var dataScan = $('#item').attr('data-scan');
console.log(dataScan); //=> set new value
答案 3 :(得分:-1)
如果您使用.prop()
而不是.attr()
$(this).parent().prop('data-scan', $(this).attr('id') );
正如jQuery api文档所述
从jQuery 1.6开始,.attr()方法为属性返回undefined 尚未设定。另外,不应该使用.attr() 普通对象,数组,窗口或文档。要检索和 更改DOM属性,使用.prop()方法。