0

如何在 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 参数!

4

4 回答 4

2

您使用了错误的attr()语法

语法:attr( 属性名 , 值)

改变

var $(this).parent().attr('data-scan')=$(this).attr('id');

$(this).closest('div').attr('data-scan',$(this).attr('id'));

你的代码是

现场演示

$('body').on('click','span', function() {
    debugger
 $(this).closest('div').attr('data-scan',$(this).attr('id'));

    s1=$(this).closest('div').attr('data-scan');
    alert(s1);
});​
于 2012-11-22T10:04:32.733 回答
1

首先,您的属性 htmldata-scan是错误的,您没有右引号。

其次,可以通过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;
    }
});

这是我认为您正在尝试做的一个示例。

但是,如果您有很多变量,那么使用这么多 if/else 语句并不理想。所以你可以使用javascripteval()函数。

var variableType = $(this).parent().data('scan');
var valueToSet = $(this).attr('id');

eval("" + variableType + " = '" + valueToSet + "';");

有关示例,请参见此处

但请注意,您的 eval 代码会受到用户注入值的影响(并不是说 javascript 对用户来说是安全的)

于 2012-11-22T10:05:53.097 回答
0

你很接近!

// set
$('#item').attr('data-scan', 'set new value');

// get
var dataScan = $('#item').attr('data-scan');
console.log(dataScan); //=> set new value
于 2012-11-22T10:05:35.083 回答
-1

如果您使用.prop()而不是.attr()

$(this).parent().prop('data-scan', $(this).attr('id') );

正如 jQuery api 文档所述

从 jQuery 1.6 开始,.attr() 方法为尚未设置的属性返回 undefined。此外,.attr() 不应用于普通对象、数组、窗口或文档。要检索和更改 DOM 属性,请使用 .prop() 方法。

于 2012-11-22T10:10:21.460 回答