diff --git a/src/ng/directive/a.js b/src/ng/directive/a.js
index 9b6c67c9c23c..7ee8f572ab64 100644
--- a/src/ng/directive/a.js
+++ b/src/ng/directive/a.js
@@ -16,10 +16,20 @@
var htmlAnchorDirective = valueFn({
restrict: 'E',
compile: function(element, attr) {
- // turn link into a link in IE
- // but only if it doesn't have name attribute, in which case it's an anchor
- if (!attr.href) {
- attr.$set('href', '');
+
+ if (msie <= 8) {
+
+ // turn link into a stylable link in IE
+ // but only if it doesn't have name attribute, in which case it's an anchor
+ if (!attr.href && !attr.name) {
+ attr.$set('href', '');
+ }
+
+ // add a comment node to anchors to workaround IE bug that causes element content to be reset
+ // to new attribute content if attribute is updated with value containing @ and element also
+ // contains value with @
+ // see issue #1949
+ element.append(document.createComment('IE fix'));
}
return function(scope, element) {
diff --git a/src/ng/directive/booleanAttrs.js b/src/ng/directive/booleanAttrs.js
index 2d1278cddb1c..739c539a7353 100644
--- a/src/ng/directive/booleanAttrs.js
+++ b/src/ng/directive/booleanAttrs.js
@@ -66,7 +66,7 @@
it('should execute ng-click but not reload when no href but name specified', function() {
element('#link-5').click();
expect(input('value').val()).toEqual('5');
- expect(element('#link-5').attr('href')).toBe('');
+ expect(element('#link-5').attr('href')).toBe(undefined);
});
it('should only change url when only ng-href', function() {
diff --git a/test/ng/directive/aSpec.js b/test/ng/directive/aSpec.js
index 8aa2449d58bb..a284f4bc8199 100644
--- a/test/ng/directive/aSpec.js
+++ b/test/ng/directive/aSpec.js
@@ -1,7 +1,13 @@
'use strict';
describe('a', function() {
- var element;
+ var element, $compile, $rootScope;
+
+
+ beforeEach(inject(function(_$compile_, _$rootScope_) {
+ $compile = _$compile_;
+ $rootScope = _$rootScope_;
+ }));
afterEach(function(){
@@ -9,8 +15,7 @@ describe('a', function() {
});
- it('should prevent default action to be executed when href is empty',
- inject(function($rootScope, $compile) {
+ it('should prevent default action to be executed when href is empty', function() {
var orgLocation = document.location.href,
preventDefaultCalled = false,
event;
@@ -42,5 +47,15 @@ describe('a', function() {
}
expect(document.location.href).toEqual(orgLocation);
- }));
+ });
+
+
+ it('should prevent IE for changing text content when setting attribute', function() {
+ // see issue #1949
+ element = jqLite('hello@you');
+ $compile(element);
+ element.attr('href', 'bye@me');
+
+ expect(element.text()).toBe('hello@you');
+ });
});