调用 eval() 时 attr 和 prop 的区别

Difference between attr and prop when call eval()

我使用 jquery-1.12.4 库,并像这样调用 eval():

var obj = $(this).find('ul');    
if ($(this).prop('class').substring(0,1) == 'c') {  
        eval(obj.attr('url'));
        console.log(obj.prop('url'))
        console.log(obj.attr('url'))
    } else {
        eval(obj.prop('clr'));
        obj.html('');
    }

我认为 return 会是一样的,但实际上不是,他们 returned:

console.log(obj.prop('url')) //undefined

console.log(obj.attr('url')) //req_subfolder('/', '_', '1')

"req_subfolder('/', '_', '1')"是我想要得到的,但是为什么我不能用prop()得到我想要的呢?是因为我调用了eval()吗?

这是因为 prop() 在 jQuery 对象中检索 Element 对象的属性,而 url 不是有效的 属性.

如果您想在元素上定义自己的数据,我建议您改用 data-*,如下所示:

console.log($('div').data('url'));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div data-url="/foobar"></div>