2014-01-30 83 views
0

我试图设置一个变量属性名称,即<a data-33="string">,其中33是由Math.random()生成的随机数。如何使用jquery设置变量(更改)属性名称?

我曾尝试:但

var randomNum1 = Math.floor(Math.random() * (200 - 100 + 1)) + 100; 
var attrb = 'data-' + randomNum1.toString(); 
$(this).attr({ 
    attrb : 'someString', 
    attrb2 : 'someString' 
}); 

,而不是添加数据randomNumber = “someString” 的属性,它增加了attrb = “someString”

我试图通过多个属性。我知道我错过了一个基本的JavaScript概念,但任何帮助将不胜感激!

+1

你不能使用对象文本来做到这一点... – dandavis

+0

[使用变量JavaScript对象的可能重复关键](http://stackoverflow.com/questions/2274242/using-a-variable-for-a-javascript-object-key) – Bergi

+0

@Bergi不完全是重复的,因为用户不知道正确的用法,他的理解是会有所不同。 –

回答

2

当你在做,{attrb: "something", attr2: "something"},键,attrbattr2不会被评估,并照原样。所以你不能在那里使用变量。

解决你的问题,你可以做什么时,调用attr()方法有两个参数 - 1:属性,2:值:

var el = $(this); 
el.attr(attrb, 'someString'); 
el.attr(attrb2, 'someString'); 

在这种情况下attr()第一个参数进行评估并用该值代替该变量。

+0

谢谢,无可否认,我被JQ宠坏了,但我很快在像你这样的人的帮助下学习JS! – user3251562

+0

欢迎! :)这将有助于很多。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript –

1

试试这个

var randomNum1 = Math.floor(Math.random() * (200 - 100 + 1)) + 100; 
var attrb = 'data-' + randomNum1.toString(); 
$(this).attr(attrb,"someString"); 
$(this).attr(attrb2,"someString"); 
0
var randomNum1 = Math.floor(Math.random() * (200 - 100 + 1)) + 100; 
var atts = {}; 
    atts['data-' + randomNum1.toString()] = 'someString'; 
$(this).attr(atts); 

设置对象常量与变量名中使用方括号的作品。

0

jQuery有一个内置的data()功能见here为正确的方法文件。 至于你具体propblem我建议

var randomNum1 = Math.floor(Math.random() * (200 - 100 + 1)) + 100; 
var attrb = randomNum1.toString(); 
var $this = $(this); 
$this.data(attrb, 'someString'); 
$this.data(attrb2, 'somestring'); 
+0

对象字面值按原样使用,“attrb”将不会被替换为其值。 –

+0

伟大的:)现在它会工作。 –

+0

谢谢史蒂夫。我相应编辑 –

0

试试这个:

function getRandom(){ 
    return (Math.floor(Math.random() * (200 - 100 + 1)) + 100).toString(); 
} 

var attrs = {}; 

attrs["data-" + getRandom()] = "something"; 
attrs["data-" + getRandom()] = "something"; 
attrs["data-" + getRandom()] = "something"; 

//console.log(attrs); 

$(".target").attr(attrs); 

这会做这样的事情:

<div class="target" data-108="something" data-123="something" data-107="something">something</div> 

什么我做的是首先创建属性OBJ分开,然后传入jQuery的.attr()方法。

工作演示http://jsfiddle.net/xBdcq/

0

尝试这样

$(this).attr('attr-'+b,'somestring');