Tag: sizzle

一个类型的jQuery .prev(),无论它是父类等

是否有一种简单的方法来获取DOM中先前出现的元素? 如果我正在查看#text3 ,我想获得之前的输入#text2 。 Choose your race! Text 3: .prev(‘input’)不起作用,因为它在父.prevAll(‘input’)内部.prevAll(‘input’)似乎也只搜索父级…我在这里遗漏了什么? 这感觉它应该比$(‘#text3’).parent().prev().find(‘input’)容易得多$(‘#text3’).parent().prev().find(‘input’) :D

IE Javascript错误“对象不支持此属性或方法”在jQuery中

出于某种原因,我在jquery.js(版本1.4.3,非压缩版本)的第3156行上的Internet Explorer 8中收到以下Javascript错误: Object doesn’t support this property or method 。 Firefox和谷歌浏览器中没有错误。 这是错误发生的行: if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { 调查( console.log(Expr.leftMatch[type]) )产生以下有趣结果:在谷歌浏览器中,它输出 /(^(?:.|\r|\n)*?):((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\(([‘”]?)((?:\([^\)]+\)|[^\(\)]*)+)\3\))?(?![^\[]*\])(?![^\(]*\))/ 但是在Internet Explorer中,这是输出: function() { var p = this; do p = p.previousSibling; while (p && p.nodeType != 1); return p; } 在哪个exec上不能被调用(它是未定义的)。 引用的函数在jquery.js中不存在。 […]

有没有jQuery / sizzle的替代品支持textNodes作为选择器中的头等公民?

我发现我需要完全支持jQuery不提供的DOM textNode的选择器。 jQuery忽略了文本节点,可能是因为大多数页面在各种浏览器可以区别对待的标签之间有大量不相关的空白。 关于文本节点的jQuery问题的大多数答案归结为使用.contents()函数,该函数返回所选项的所有子节点,包括文本节点 – 所有其他jQuery API忽略文本节点。 通常你不需要一些不能轻易建立起来的东西.contents()但我发现自己处于这样的境地。 我的用例是我想找到并在第三方网页中包装我无法控制的任意文本。 (想想浏览器扩展或用户脚本。) 到目前为止,我一直很乐意遍历DOM寻找所有文本节点或找到包含我感兴趣的所有文本节点的包装元素,并使用.contents()来迭代它们。 但是现在我发现我有时需要jQuery / sizzle选择器的全部function来将我的注意力缩小到类中的类的某些可能性等。 我考虑了使用textNode选择器扩展jQuery的方法,但这似乎是不可能的,因为忽略文本节点的普遍规则会在我的扩展被调用之前过滤掉其中的许多节点。 因此,我正在寻找一些其他JavaScript工具,它提供类似选择器的东西,但允许选择在其选择器表达式语法中任意混合的文本节点。 这是我可能需要做的一个例子: $(‘.ii:even > div > TXT, .ii:even > div > div.im > TXT’) 这是我个人尚未需要但可以轻易想象的一个例子: $(‘#something .somethingElse TXT’) 当你可以寻址(选择)textNodes的直接父代时,迭代它们的.contents()很容易,当你只能识别一些任意的祖先但是想要下面的所有文本节点时,这当然不是这样,这当然是元素节点很简单。

当找不到选择器时,如何扩展jQuery的选择器引擎以警告我?

假设我在试图找到一个元素时犯了一个错误而且我$(‘lsdkfj’)了,比如$(‘lsdkfj’) 。 我不想在jQuery中返回一个空数组,而是想在控制台中返回一条错误消息,例如”The selector ‘lsdkfj’ cannot be found” 。 这样做的最佳方法是什么?

如何从项列表中获取特定的jQuery项?

我有这个: first second third fourth 然后我用jQuery选择它: $(‘ul’).find(‘li’); 或$(‘ul li’); 我怎么能从这两个jQuery选择器获得,例如只有第二个li或第三个,并且单独留下第一个和第四个? 我认为它可能适用于: $(‘myselector’).get(indexNumber); // however, it won’t work. 对这个问题的任何想法? 谢谢。

jQuery:.has()和:has()之间的细微差别

当与子选择器>一起使用时,jQuery的“has”的两个变体表现不同。 拿这个HTML: Text 现在: $(“div:has(>span)”); 将它返回,同时: $(“div”).has(“>span”); 不会。 它是一个bug还是一个function? 比较这里: http : //jsfiddle.net/aC9dP/ 编辑:这可能是一个错误或至少没有记录的不一致行为。 无论如何,我认为让子选择器始终作为一元运算符工作是有益的。 它使您能够执行其他需要自定义过滤function的操作 – 它允许您直接选择具有特定子项的元素: $(“ul:has(>li.active)”).show(); // works $(“ul”).has(“>li.active)”).show(); // doesn’t work, but IMHO it should 而不是: $(“ul”).filter(function () { return $(this).children(“li.active”).length > 0; }).show(); 我为此打开了一张jQuery票证(7205) 。

使用完全限定的URL在Sizzle中选择元素的方法

在最近编写脚本时,我遇到了Sizzle如何使用href属性的特殊细微差别。 具体来说,在href上使用属性选择器,Sizzle将使用实际属性值: // Will not find … $(‘a[href=”http://www.example.com/https://stackoverflow.com/questions/9222026/method-for-selecting-elements-in-sizzle-using-fully-qualified-urls/index.html”]’) Sizzle使用.getAttribute()而不是elem.href (或更确切地说, elem[‘href’] ,正如Sizzle在大多数情况下所做的那样 ); elem.href将提供完全限定的URL。 为了更多地理解这一点,我创建了一个小提琴来尝试不同forms的URL 。 在测试过程中,我发现设置href等于自身的(显而易见的)“解决方案”: $(‘a’).each(function(){ this.href = this.href; }); 毫不奇怪,更新元素以反映this.href提供的完全限定的URL。 还有其他方法我发现工作(任何更新元素的href属性),但他们只是将上述方法移植到其他forms,或涉及像.filter() (演示)的东西 : var matches = $(‘a’).filter(function(){ var window_location = ‘http://example.com/services.html’; return window_location == this.href; }); 我之所以这么说是因为在选择之前做el.href = el.href是某种意义上的解决方法(我不认为这是一个很好的选择)。 例如,如果可以,则运行对一组元素的检查以查找是否包含与当前URL(或其他URL)的匹配链接,这样做更容易: $links.not(‘[href=”‘ + window.location.href + ‘”]’) 有没有办法做到这一点,而不必诉诸“更新”属性,或编写额外的代码来管理支票? 有没有一种方法我忽略了不涉及修改Sizzle的工作方式^ ? ^注意 :与仅添加expression相比,修改实际源代码将是一个(坏)想法: $.extend($.expr[‘:’], { […]

是否可以创建导航祖先的自定义jQuery选择器? 例如a:最近或:父母选择器

我编写了很多jQuery插件,并且我一直使用自定义jQuery选择器:focusable和:closeto来提供常用的filter。 例如:focusable看起来像这样 jQuery.extend(jQuery.expr[‘:’], { focusable: function (el, index, selector) { return $(el).is(‘a, button, :input[type!=hidden], [tabindex]’); }; }); 并像任何其他选择器一样使用: $(‘:focusable’).css(‘color’, ‘red’); // color all focusable elements red 我注意到没有一个可用的jQuery选择器可以导航回祖先。 我认为这是因为它们的设计遵循了向下钻取的基本CSS选择器规则。 以此示例:找到具有焦点的输入的标签: $(‘input:focus’).closest(‘.form-group’).find(‘.label’); 我需要插件的等效类型的复杂选择器, 因此将这样的选择器作为单个字符串提供是有用的 (因此它们可以作为插件的选项提供)。 例如: $(‘input:focus < .form-group .label'); 要么 $(‘input:focus:closest(.form-group) .label’); 注意:请假设更复杂的操作并且需要祖先导航(我意识到这个特定的例子可以用has来完成,但这没有帮助)。 例如它还需要支持这个: options.selector = ‘:closest(“.form-group”) .label’; $(‘input’).click(function(){ var label = $(this).find(options.selector); }); 是否可以扩展jQuery选择器来扩展搜索行为(而不仅仅是添加更多的布尔filter)? 如何扩展自定义搜索行为? […]

HTML5数据属性中的通配符

是否可以在属性名称中使用带有通配符的jQuery查找所有DOM元素? 请考虑以下HTML: 我想要实现的是找到所有具有以data-validate-开头的属性名称的dom节点 据我所知, 这里描述的通配符与属性的“值”有关。 原因是 – 我想找出哪些元素应该被validation – 然后找出哪些validation参数(比如-email)正在发挥作用。 谢谢

CSS解析器/抽象符? 如何将样式表转换为对象

是否有一个标准或可靠的方法已经存在javascript框架,如jquery将样式表解析为对象? 我想知道为什么有两个原因: 我看过几个问题,有人想知道如何获取样式表为选择器设置的样式属性,而不是选择器最终inheritance的样式属性。 如果Sizzle做了它应该做的事情,这可能是确保样式表能够跨浏览器正确呈现的解决方案。 基本上jquery解析样式表并手动设置所有属性(可能基于浏览器或已知的未实现的选择器。)这样设计人员/开发人员只需编写一个向前兼容并具有jquery / sizzle的CSS3样式表来完成浏览器赢得的工作“T。 我看到的唯一缺点是,这仍然不会实现CSS3属性,但它是一个开始。