我对JavaScript的本机element.value与jQuery的$(元素).val();
之间存在差异。我在AngularJS中创建了一个BB编辑器,这就是我的问题来源。
以下是我的指令的代码:
bbApp.directive('bbEdit', function() {
return {
restrict: 'A',
templateUrl: 'tpl/editor.html',
link: function(scope) {
scope.tagType = '';
var el = document.querySelector('#bbeditor');
scope.wrap = function(type) {
scope.tagType = type;
var str = el.value.toString();
var selection = str.slice(el.selectionStart, el.selectionEnd);
if( scope.noWrapTags.indexOf(scope.tagType) == -1 && selection == "" ) {
alert('Please select text to format');
return false;
}
if( scope.allowedTags.indexOf(scope.tagType) == -1 ) {
alert('Sorry, that formatting option is not available');
return false;
}
var strArr = str.split("");
if( scope.noWrapTags.indexOf(scope.tagType) != -1 ) {
strArr.splice(el.selectionStart,selection.length, "["+ scope.tagType +"]");
} else {
strArr.splice(el.selectionStart,selection.length, "["+ scope.tagType +"]"+selection+"[/"+ scope.tagType +"]");
}
el.value = strArr.join("");
}
}
}});
我正在访问这样的元素:var el = document.querySelector('#bbeditor');
然后获取值:var str = el.value.toString();
但是当我尝试使用jQuery' s。()时,它无法正常工作。
当前编写的方式,应用程序将在适当的自定义bb标记中包装任何突出显示的文本。
但是当我像这样访问textarea的值时:
var el = angular.element(element).find('textarea');
var str = el.val().toString();
我得到了文本值,但我的字符串操作只是用bb标签包装textarea的整个值,而不是只包装用户突出显示的文本。
为此使用jQuery是否值得麻烦?我使用document.QuerySelector()好吗?
我只是想使用Angular中可用的功能,显然在我的指令中我可以访问元素。但是jQuery .val()与native .value的工作方式不同。
任何解释/建议将不胜感激。我是Angular的新手。
我的应用程序正在运行,但我只是想知道是否有不同的方式我应该这样做。
答案 0 :(得分:1)
document.querySelector
返回匹配的第一个元素。 jQuery的.find
方法返回一个匹配元素数组。
除此之外,.value
未返回所选文字,您使用var selection = str.slice(el.selectionStart, el.selectionEnd)
来获取所选文字。
如果您的代码在javascript中运行,我会保留它。没有令人信服的理由将其转换为jQuery(恕我直言)。在这种情况下,你找不到任何让事情变得非常容易的东西。