使用javascript和jQuery更改变量名称

时间:2012-11-22 10:02:58

标签: javascript jquery variables attributes

如何在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 个答案:

答案 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'));

Here is a working example


要获得该值,您可以执行以下操作之一:

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 + "';");

See here for an example

但请注意,您的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()方法。