0

私は次のJavaScriptのチャンクを持っています:

(本質的には jquery.caret ライブラリです)

(function($,len,createRange,duplicate){
    $.fn.caret=function(options,opt2){
        var start,end,t=this[0],browser=$.browser.msie;
        if(typeof options==="object" && typeof options.start==="number" && typeof options.end==="number") {
            start=options.start;
            end=options.end;
        } else if(typeof options==="number" && typeof opt2==="number"){
            start=options;
            end=opt2;
        } else if(typeof options==="string"){
            if((start=t.value.indexOf(options))>-1) end=start+options[len];
            else start=null;
        } else if(Object.prototype.toString.call(options)==="[object RegExp]"){
            var re=options.exec(t.value);
            if(re != null) {
                start=re.index;
                end=start+re[0][len];
            }
        }
        if(typeof start!="undefined"){
            if(browser){
                var selRange = this[0].createTextRange();
                selRange.collapse(true);
                selRange.moveStart('character', start);
                selRange.moveEnd('character', end-start);
                selRange.select();
            } else {
                this[0].selectionStart=start;
                this[0].selectionEnd=end;
            }
            this[0].focus();
            return this
        } else {
            // Modification as suggested by Андрей Юткин
           if(browser){
                var selection=document.selection;
                if (this[0].tagName.toLowerCase() != "textarea") {
                    var val = this.val(),
                    range = selection[createRange]()[duplicate]();
                    range.moveEnd("character", val[len]);
                    var s = (range.text == "" ? val[len]:val.lastIndexOf(range.text));
                    range = selection[createRange]()[duplicate]();
                    range.moveStart("character", -val[len]);
                    var e = range.text[len];
                } else {
                    var range = selection[createRange](),
                    stored_range = range[duplicate]();
                    stored_range.moveToElementText(this[0]);
                    stored_range.setEndPoint('EndToEnd', range);
                    var s = stored_range.text[len] - range.text[len],
                    e = s + range.text[len]
                }
            // End of Modification
            } else {
                var s=t.selectionStart,
                    e=t.selectionEnd;
            }
            var te=t.value.substring(s,e);
            return {start:s,end:e,text:te,replace:function(st){
                return t.value.substring(0,s)+st+t.value.substring(e,t.value[len])
            }}
        }
    }
}(jQuery,"length","createRange","duplicate");

しかし、それを YUI コンプレッサーで実行すると、うまくいきません。1行目でエラーをスローします

これをテストするためにhttp://compressorrater.thruhere.net/を使用しました....

www.jslint.com を使用すると、安全でない文字行 1、文字 0 があることがわかります。

これを解決する方法がわかりません.... 理想的には、適切な .net ポートがあるため、YUI Compressor を引き続き使用したいと思います。

4

1 に答える 1

0

これは、問題のファイル (jquery.caret) に文字があるためです。

私はここでそれについてブログを書きました:

http://www.alexjamesbrown.com/blog/development/syntax-error-using-yahoo-yui-compressor-net-port-works-using-java-version/

于 2013-01-15T14:13:07.783 に答える