【发布时间】:2015-03-10 11:50:33
【问题描述】:
我想获取 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 单元测试完全陌生,所以如果这不是要走的路,请告诉我。
【问题讨论】:
-
@LShetty 你明白这个问题了吗?这是一个通用解决方案的问题,而不是这个具体案例。
-
糟糕!最终删除了我的评论。 @Nit,我知道你的意思。感谢您的推动。
-
@TMG good 不在
span标签中,这是错误的或您的需要。 -
如果是错误的,那么这对你有用
var text = $("#test span:visible").text(); -
@charlietfl 你是什么意思?
标签: javascript jquery unit-testing dom angularjs-directive