繁体   English   中英

使用javascript和jQuery更改变量名称

[英]Changing variable name with javascript and jQuery

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

你使用错误的attr()语法

语法:attr(attributeName,value)

更改

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);
});​

首先,您的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;
    }
});

这是我认为你想要做的一个例子

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

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

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

请看这里的例子

但是要小心,你的eval代码会受到用户注入的值(不管javascript对用户是否安全)

你很亲密!

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

// get
var dataScan = $('#item').attr('data-scan');
console.log(dataScan); //=> set new value

如果你使用.prop()而不是.attr()可能是最好的

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

正如jQuery api文档所述

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM