问题
Both :checked
and :selected
seem to provide equal results when working with <option>
elements. Is there any advantage to using one over the other? If :selected
does the same thing as :checked
, what is the reason for it to be included in jQuery at all?
Example:
<p class="p1">Select a value</p>
<p class="p2">Select a value</p>
<select>
<option value="a">Option one</option>
<option value="b">Option two</option>
</select>
$('select').on('change', function(){
$('.p1').text(function() {
return $('option:selected').text();
});
$('.p2').text(function() {
return $('option:checked').text();
});
});
JS Bin demo
回答1:
Judging by the documentation, it seems that :selected
is identical to :checked
with the exception that it only matches option
elements. This is corroborated by HTMLOptionElement being the only element type in the DOM to have a selected
property (which is what :selected
uses to test the selectedness of an element). In other words, when you're only interested in option
elements, both selectors are identical — except :selected
is non-standard.
Since the documentation itself recommends using standard selectors to maximize performance (and because why would you not use a standard selector over a non-standard one if given the choice?), I don't think there is any reason to use :selected
in any situation ever. I can't think of any situation in which *:selected
would be preferable to option:checked
(seriously, when was the last time you used a pseudo-class of this kind without a type selector?).
Perhaps the reason it was included in jQuery was because Selectors 3 (in which :checked
appears) wasn't yet standardized at the time jQuery was born, but :checked
has been in the spec since 2000, so I'm not entirely convinced that's really the reason.
回答2:
Normally, :selected is for SELECT OPTIONS elements. :checked is for CHECKBOX elements.
<p class="p1">Select a value</p>
<p class="p2">Select a value</p>
<p class="p3">Select a value</p>
<p class="p4">Select a value</p>
<select>
<option value="a">Option one</option>
<option value="b">Option two</option>
</select>
<input type="checkbox" value="C" />
$('input').on('change', function(){
$('.p1').text(function() {
return $('option:selected').text();
});
$('.p2').text(function() {
return $('option:checked').text();
});
$('.p3').text(function() {
return $('input[type="checkbox"]:selected').val();
});
$('.p4').text(function() {
return $('input[type="checkbox"]:checked').val();
});
});
http://jsbin.com/zadocokule/edit?html,js,output
来源:https://stackoverflow.com/questions/44088774/difference-between-checked-and-selected-when-working-with-option-elements-in-j