javascript - 如何检查与显示相关的文本内容 :none style

标签 javascript jquery unit-testing dom angularjs-directive

我想获取 DOM 节点的文本内容,但没有有效隐藏的元素(具有样式 display:none)。

我了解 DOM textContent 属性和 jQuery 的 text() 方法(我认为它无论如何都使用 textContent),但它不尊重 display:none:

var div = $("<div><span style='display:none'>not </span>good</div>");
var text = div.text(); // "not good"
var textContent = div[0].textContent; // "not good"

如何从该 div 中获取 “good” 内容?

我需要这个单元测试我的 AngularJS 指令。我正在使用 Jasmine 编写测试,我的测试与此类似:

    it('should check text ignoring hidden content', function() {
      $rootScope.hidden = true;
      var template = '<div><span ng-hide="hidden">not </span>good<div>';
      var element = $compile(template)($rootScope);
      $rootScope.$digest();

      console.debug(element.html());    // prints: '<span class="ng-hide" ng-hide="hidden">not </span>good<div></div>'
      console.debug(element.text());    // prints: 'not good'
      expect(element.text()).toEqual('good');   // oops, that fails :(
});

在我的实际测试中,我想测试我的自定义指令而不是 ng-hide,但实际指令与该问题无关。

我对 Jasmine 和 Javascript 单元测试完全陌生,所以请让我知道这是否不是正确的方法。

最佳答案

需要记住的一些注意事项:您可以使用 clone() 来避免修改原始对象,但是要使用 :visible,元素必须实际上是在 DOM 中。

var sample = $("<div><span style='display:none'>not </span>good <div>content</div></div>");
var t = sample.clone();
$('body').append(t);
t.find('*:not(:visible)').remove();
t.remove();
alert(t.text());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

关于javascript - 如何检查与显示相关的文本内容 :none style,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28962995/

相关文章:

Javascript 导致 DOM 元素被删除

显示指令(占位符)文本的 Javascript 文本输入字段

javascript - Angular Material : md-select-header inside tab not working

jquery - Django Admin 中有用于缩略图的 Jcrop 吗?

javascript - 尝试从选项元素获取 HTML

c - 使用检查在 C 中调试单元测试

javascript - ReactJS 中的 JQuery 函数用于动态视口(viewport)高度

jquery - 在按钮 jQuery 上依次在 3 个或更多类之间切换

angularjs - 在 Angular 中对装饰器进行单元测试,装饰 $log 服务

java - Apache Spark Streaming 的集成测试失败