0

我不知道如何向后编写代码以支持 jQuery 1.4.2。所以我很困惑试图支持旧的库文件。

    var n = this;
    e(document).ready(function () {
        var r = e("body").find(n);
        r.attr("placeholder", t);
        r.val(t);
        n.focus(function () {
            e(this).val("")
        }).blur(function () {
            var r = e(n);
            if (r.val() == "") r.val(t)
        })
    })
4

4 回答 4

0

这可能不是最优雅的解决方案,但您可以检查 find 函数是否存在,如果不存在则将其添加到 jquery 对象中。

就像是

if (!$.find) {
    $.fn.find = function () {
        // find function definition
    };
}

编辑:更好的条件:

var version = $.fn.jquery.split('.');
if (version[0] < 2 && version[1] <= 6 && version[2] < 4)

最后编辑:由于 jsfiddle 的 jquery 不少于 1.6.4,我无法对此进行测试以验证,但我从 google 的 cdn jquery 1.6.4 中提取了 find 函数,因此完整的 monkeypatch 将是:

var version = $.fn.jquery.split('.');
if (version[0] < 2 && version[1] <= 6 && version[2] < 4) {
$.find = function( expr, context, isXML ) {
var set;

if ( !expr ) {
    return [];
}

for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
    var match,
        type = Expr.order[i];

    if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
        var left = match[1];
        match.splice( 1, 1 );

        if ( left.substr( left.length - 1 ) !== "\\" ) {
            match[1] = (match[1] || "").replace( rBackslash, "" );
            set = Expr.find[ type ]( match, context, isXML );

            if ( set != null ) {
                expr = expr.replace( Expr.match[ type ], "" );
                break;
            }
        }
    }
}

if ( !set ) {
    set = typeof context.getElementsByTagName !== "undefined" ?
        context.getElementsByTagName( "*" ) :
        [];
}

return { set: set, expr: expr };

};

于 2013-08-19T19:59:26.153 回答
0

你确定吗?我刚刚删除了一个使用1.4.2for的示例find,它工作正常。

HTML:

<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<meta charset=utf-8 />
<title>JS Bin</title>
</head>
<body id='bd'>
 <ul class="level-1">
  <li class="item-i">I</li>
  <li class="item-ii">II
    <ul class="level-2">
      <li class="item-a">A</li>
      <li class="item-b">B
        <ul class="level-3">
          <li class="item-1">1</li>
          <li class="item-2">2</li>
          <li class="item-3">3</li>
        </ul>
      </li>
      <li class="item-c">C</li>
    </ul>
  </li>
  <li class="item-iii">III</li>
</ul>
</body>
</html>

JS:

$('li.item-ii').find('li').css('background-color', 'red');

在这里找到垃圾箱:http: //jsbin.com/INonAYo/1/edit

于 2013-08-19T20:03:21.653 回答
0

是的,那是正确的。.find () 函数是在 1.6 中添加的。您可以使用 CSS 选择器升级 jQuery 或使用 .find()。

如果你有具有唯一 .id 元素的元素,你可以改变你的 .find 函数来调用它:

.find('#' + n.id)

另一种选择,因为你有'this',你可以只使用基本的$(this):

var r = $(this);

或者,对于您的代码 r = e(this);

于 2013-08-19T19:56:06.847 回答
0

你的代码过于复杂了。首先,您不需要$(document).ready()在插件内部使用,您可以让使用插件的开发人员来处理。接下来,在插件内部,this是一个包含所选元素的 jQuery 对象。您应该对它们进行迭代,然后单独对每一个进行操作。

(function ($) {
    $.fn.labelfixer = function (t) {
        return this.each(function(){
            var $this = $(this);
            $this.attr("placeholder",t);
            this.value = t;
            $this.focus(function(){
                if (this.value == t) {
                    this.value = "";
                }
            });
            $this.blur(function(){
                if (this.value == "") {
                    this.value = t;
                }
            });
        });
    };
})(jQuery);
于 2013-08-19T20:34:12.823 回答