js native .value与jQuery .val()

时间:2015-05-05 18:02:52

标签: javascript jquery angularjs

我对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的新手。

我的应用程序正在运行,但我只是想知道是否有不同的方式我应该这样做。

1 个答案:

答案 0 :(得分:1)

document.querySelector返回匹配的第一个元素。 jQuery的.find方法返回一个匹配元素数组。

除此之外,.value未返回所选文字,您使用var selection = str.slice(el.selectionStart, el.selectionEnd)来获取所选文字。

如果您的代码在javascript中运行,我会保留它。没有令人信服的理由将其转换为jQuery(恕我直言)。在这种情况下,你找不到任何让事情变得非常容易的东西。