尝试在不直接评估元素的情况下测试元素是否具有属性

时间:2015-05-22 14:59:12

标签: javascript angularjs

尝试通过在html上发送名为“attr - {{foo}}”的属性来创建查询对象,点击各种按钮,这些属性从ng-repeat或其他方式获取。我想在控制器上首先测试元素是否具有映射到作用域中查询对象的键的所有属性,并继续这个if if else链接到只有一个属性;然而,当我尝试这个时,我会得到错误“找不到.value of'null'”,因为我正在测试

(下面你会找到一个代表我的控制器的片段)

 vm.openFoos = function (event) {
 if (event.target.attributes.getNamedItem('attr-foo').value && 
  !event.target.attributes.getNamedItem('attr-bar').value) {
  var obj = {
    foo: event.currentTarget.attributes.getNamedItem('attr-foo').value,
    name: $routeParams.name
  } else if {
  (event.target.attributes.getNamedItem('attr-foo').value && 
   event.target.attributes.getNamedItem('attr-bar').value) {
  var obj = {
    foo: event.currentTarget.attributes.getNamedItem('attr-foo').value,
    name: $routeParams.name,
    bar: event.currentTarget.attributes.getNamedItem('attr-bar').value
   }
  }
  data.getReviews(obj)
    .success(function (data){$log.debug(data)}).error(function(e){$log.debug(e)}); 
};

如果我点击同时包含attr-foo和attr-bar的元素(这是通过此测试的惯例,从最严格的具有属性的情况到最少,我知道如果我反向编写if语句,我会得到错误“找不到null的值”。示例HTML:

<span class="one" ng-click="vm.openFoos($event) attr-foo="foooo">Click FOOO</span>

<span class="two" ng-click="vm.openFoos($event) attr-foo="fo" attr-bar="bar">Click FOO BAR</span>

单击span.one会抛出错误“找不到null值”,但单击span.two可以正常工作。 我不想为出现在各种html属性上的查询中的每个键组合实例编写一个控制器;但是,我收到了这个错误。

2 个答案:

答案 0 :(得分:1)

你能找到hasOwnProperty吗?

object.hasOwnProperty("attrname"); // Yields true or false.

答案 1 :(得分:0)

而不是使用

if (event.currentTarget.attributes.getNamedItem('attr-thing').value ....

使用

if (event.currentTarget.attributes.getNamedItem('attr-thing') ....

event.currentTarget.attributes.getNamedItem('attr-thing')

不存在,显然一个人无法接受它的价值!