【发布时间】:2014-05-27 14:24:53
【问题描述】:
我有一个指令,它获取元素的文本并在每 10 个字符之后放置 wbr 元素。例如,我在具有长文本(例如 URL)的表格单元格上使用它,因此它不会跨越表格。指令代码:
myApp.directive('myWbr', function ($interpolate) {
return {
restrict: 'A',
link: function (scope, element, attrs) {
// get the interpolated text of HTML element
var expression = $interpolate(element.text());
// get new text, which has <wbr> element on every 10th position
var addWbr = function (inputText) {
var newText = '';
for (var i = 0; i < inputText.length; i++) {
if ((i !== 0) && (i % 10 === 0)) newText += '<wbr>'; // no end tag
newText += inputText[i];
}
return newText;
};
scope.$watch(function (scope) {
// replace element's content with the new one, which contains <wbr>s
element.html(addWbr(expression(scope)));
});
}
};
});
在 IE 中工作正常(我尝试过 IE8 和 IE9),它会向控制台抛出错误:Error: Invalid argument.
这里是jsFiddle,点击按钮可以在控制台看到错误。
这么明显的问题:为什么会出现错误,它的来源是什么,为什么只在 IE 中?
(额外的问题:我怎样才能让 IE 开发工具告诉我更多关于错误的信息,比如源代码中的那行,因为我花了一些时间找到它,Error: Invalid argument. 并没有告诉我太多关于起源的信息。)
P.S.:我知道 IE 根本不知道 wbr,但这不是问题。
编辑: 在我的实际应用程序中,我重写了指令,不查看元素的文本并对其进行修改,而是通过属性传递输入文本,现在在所有浏览器中都可以正常工作.但我仍然很好奇为什么最初的解决方案会在 IE 中给出该错误,从而开始赏金。
【问题讨论】:
-
jsFiddle 在旧的 IE(至少是编辑器)中不起作用,所以我不确定你是如何在 IE 8 中进行测试的。尝试访问jsfiddle.net/5UZbk/1/show(注意我添加了“显示/" 到 URL 的末尾) - 它在 IE 8 中对我来说很好
-
Here 它表示
<wbr>在任何 IE 中不支持。可能是原因(或者可能不是,以防万一它可能会有所帮助)。 -
@Ian 我用 IE8 和 IE9 测试了我的真实应用程序。我在其他浏览器中创建的 jsFiddle,然后指向它的链接在 IE9 中打开正常(以及我描述的错误)
-
@NikosParaskevopoulos 不,这不是问题(我问题的最后一行)
-
@NikosParaskevopoulos 抱歉,我在最后一行使用了错误的标记,所以它不是整个可见
标签: javascript angularjs internet-explorer angularjs-directive