jQuery 选择器比较元素的属性(和/或属性)

Posted

技术标签:

【中文标题】jQuery 选择器比较元素的属性(和/或属性)【英文标题】:jQuery selector comparing element's attributes (and/or properties) between them 【发布时间】:2012-01-12 07:29:47 【问题描述】:

事情从我的previous question说起: 使用 jQuery 是否可以比较选择器中的两个属性? 我的意思是:

$('element[atribute1!=attribute2]')

或者,在一个实际的例子中:

$('input[name!=id]')

就我而言,我需要它来获取用于编辑内容的 html 表单中有多少输入字段未更改, 我试图让这段代码工作:

if($('input[DefaultValue!=input.value]').lenght==0)...

怎么样? 它应该返回更改字段的数量(如果我得到 0,我将停止表单提交,显示警告消息并返回而不更新)

感谢您的帮助。

【问题讨论】:

只是好奇..你试过吗? 是的......代码似乎无法正常工作(表单提交继续)但我没有收到错误通知(使用 firefox 8 + webdeveloper 插件) 我无法编辑我之前的评论,所以请遗憾:我不仅一开始拼错了“长度”这个词,而且我什至高兴得太早了,因为我的代码仍然是错误的我打算实现(现在我总是觉得修改元素的数量等于 0)。谢谢 RightSaidFred,将尝试您的代码。 (我删除了我写代码工作的评论,以避免有人阅读它感到困惑) 【参考方案1】:

没有。如果你查看 jQuery 的文档,你会发现没有这样的选择器。

另外,defaultValue 是一个属性,而不是一个属性。

你可以这样做:

var changed = $('input').filter(function() 
    return this.value !== this.defaultValue;
);

【讨论】:

您好 RightSaidFred... 感谢您的回复。是的,我确实没有发现任何关于使用 jQuery 的方法......它似乎有效,但我意识到我总是收到“你没有修改数据”的消息,所以我要编辑我之前的评论。谢谢。 您的代码运行良好,谢谢!我只有最后一个问题:如果我将这一行 var changed = $('input[name^="modcc_"]').filter(function() 更改为 var changed = $('input[name^="modcc_"]', myForm).filter(function() 我总是觉得好像我没有更改任何东西......我确定 myForm 是字符串“#formMod”(与我的表单的 id 是 id="formMod") @danicotra:不知道为什么会这样。您确定这些输入在formMod 内吗?您是否拥有多个具有相同 ID 的元素? 你好!我接受了您对我的问题的回答,并提出了another question about this specific issue。无论如何:是的,我确信输入在该表单内,并且它是唯一具有该 ID 的东西 @danicotra:我回答了你的另一个问题。一旦你展示了你的 HTML 标记就很清楚了。【参考方案2】:

你可以使用jQuery filter()函数,像这样:

var different = $('input').filter(function()

    return $(this).attr('data-default-value') != $(this).val();   
);

然后,你可以测试different.length > 0

这是一个完整的工作示例:http://jsfiddle.net/us47d/

【讨论】:

您的代码似乎不起作用,我总是觉得好像我更改了所有表单输入字段! 我的 jsfiddle 示例工作正常。如果您的实现不同,请发布您的源代码。 我明白了...事实是我没有将 data-default-value 属性放入我的输入中...向您提出一些问题:1 它是“标准” html/xhtml 属性? (从来不知道) 2 我想我会走 rightaidfred 方式(否则我应该修饰我所有的输入字段......),你认为使用你的方式有很多优势吗? ...和 ​​3,请您回复我对 rightaidfred 答案的最后评论吗?谢谢。 在创建自己的自定义属性时,HTML 规范更喜欢将它们命名为 data-library-name,因此像 data-default-value 这样的属性将生效。但是,我不知道已经存在一个名为 defaultValue 的输入的 HTML 属性(请参阅规范 here),所以我实际上会使用 defaultValue 好的 wsanville,非常感谢...我仍在等待我对 RightSaidFred 答案的最后评论提出的问题的答案,也许我会创建一个新的答案...再见,谢谢又是你。

以上是关于jQuery 选择器比较元素的属性(和/或属性)的主要内容,如果未能解决你的问题,请参考以下文章

1.1了解工厂函数选着器以及常见的对象函数

jquery标签选择器怎么循环

jQuery选择器

jQuery 选择器

jQuery 选择器

jQuery 选择器