如何比较节点数组中是否存在HTML元素?

时间:2017-01-28 23:32:49

标签: javascript angularjs nodes

selectedContentWrap:HTML节点。 htmlVarTag:是一个字符串。

如何检查节点中是否存在HTML元素?

htmlVarTag是一个字符串,并且不了解如何转换它以便再次检查是否有这样的标记,以便如果有,我可以将其删除?

这里是我的节点的输出,存储在selectedContentWrap中 enter image description here

 var checkingElement = $scope.checkIfHTMLinside(selectedContentWrap,htmlVarTag );
 $scope.checkIfHTMLinside = function(selectedContentWrap,htmlVarTag){

     var node = htmlVarTag.parentNode;
     while (node != null) {
         if (node == selectedContentWrap) {
             return true;
         }
         node = node.parentNode;
     }
     return false;


 }

4 个答案:

答案 0 :(得分:1)

好吧,如果你可以粘贴selectedContentWrap的内容,我就可以测试这段代码,但我认为这样可行

// Code goes here

var checkIfHTMLinside = function(selectedContentWrap,htmlVarTag){
  for (item of selectedContentWrap) {
    if (item.nodeName.toLowerCase() == htmlVarTag.toLowerCase()){
      return true;
    }
  }
  return false;
}

答案 1 :(得分:1)

最简单的是使用angular.element,这是jQuery兼容方法的一个子集

$scope.checkIfHTMLinside = function(selectedContentWrap,htmlVarTag){
   // use filter() on array and return filtered array length as boolean
   return selectedContentWrap.filter(function(str){
      // return length of tag collection found as boolean
      return angular.element('<div>').append(str).find(htmlVarTag).length
   }).length;    
});

如果目标只是寻找特定标签或任何标签(即仅与文本区分),仍然不是100%明确的

或随便提到实际删除标签

如果你想删除标签,你不清楚你是否只想打开它或删除它的内容......使用angular.element

很容易实现

答案 2 :(得分:0)

尝试使用:node.innerHTML并检查

答案 3 :(得分:0)

是我还是在stackoverflow上发布一个问题,在测试测试后20分钟我想出来了......,...

答案是在selectedContentWrap中我已经获得了节点列表,我需要做的就是比较,所以一个简单的if for循环就适合了。

要比较我只需要使用.nodeName的名称,因为它可以跨浏览器工作(如果我错了,请纠正我)

有些开发人员说“标签名称字典和匿名封闭” - 但找不到任何东西。如果有人有这个图书馆,你可以把它发布到问题吗?

这是我的代码。

  var node = selectedContentWrap;
      console.log('node that is selectedwrapper', selectedContentWrap)
      for (var i = 0; i < selectedContentWrap.length; i++) {
          console.log('tag name is ',selectedContentWrap[i].nodeName);
          var temptagname = selectedContentWrap[i].nodeName; // for debugging
          if(selectedContentWrap[i].nodeName == 'B' ){
              console.log('contains element B');
          }

      }