.find不't在jquery 1.4.2中工作,我可以'我不知道如何支持它

.find doesn't work in jquery 1.4.2 and I can't figure out how to support it

本文关键字:何支持 我不知道 我可以 支持 jquery find 工作      更新时间:2023-09-26

我不知道如何向后写代码来支持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)
        })
    })

您的代码过于复杂。首先,你不需要在插件内部使用$(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);

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

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

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

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

.find('#' + n.id)

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

var r = $(this);

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

这可能不是最优雅的解决方案,但您可以检查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,我无法对此进行测试验证,但我从谷歌的cdn jquery 1.6.4中提取了find函数,因此完整的猴痘将是:

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 };

};