Cách sử dụng querySelectorAll chỉ cho các phần tử có tập thuộc tính cụ thể?


124

Tôi đang cố gắng sử dụng document.querySelectorAllcho tất cả các hộp kiểm có valuethuộc tính được đặt.

Có các hộp kiểm khác trên trang chưa được valueđặt và giá trị khác nhau cho mỗi hộp kiểm. Id và tên không phải là duy nhất.

Thí dụ: <input type="checkbox" id="c2" name="c2" value="DE039230952"/>

Làm cách nào để chỉ chọn những hộp kiểm đã đặt giá trị?


1
cái này có bao gồm khoảng trống không? thíchvalues=""
Joseph

các hộp kiểm khác hoàn toàn không có giá trị nên nó sẽ không phải bao gồm điều đó.
Soryn

Câu trả lời:


217

Bạn có thể sử dụng querySelectorAll()như thế này:

var test = document.querySelectorAll('input[value][type="checkbox"]:not([value=""])');

Điều này được dịch thành:

lấy tất cả các đầu vào có thuộc tính "giá trị" và có thuộc tính "giá trị" không trống.

Trong bản trình diễn này , nó vô hiệu hóa hộp kiểm có giá trị không trống.


Làm thế nào để chỉ chọn đầu vào loại hộp kiểm? có rất nhiều thẻ đầu vào khác có thuộc tính giá trị, nhưng tôi chỉ muốn các hộp kiểm.
Soryn

1
@Soryn thêm [type="checkbox"]. Đã cập nhật câu trả lời của tôi.
Joseph

2
CÂU TRẢ LỜI CHÍNH XÁC! Điều này giúp loại bỏ phần lớn sự cần thiết phải bao gồm jQuery trong các thư viện nhỏ để truyền tải DOM. Tôi có thêm một số mẹo trong câu trả lời bên dưới.
mattdlockyer

bạn có thể cho tôi biết cú pháp này là gì không [value] [type = "checkbox"]: not ([value = ""] Tôi không thấy cú pháp này như thế này trước đây trong javascript
blackHawk

@blackHawk Cú pháp sử dụng Bộ chọn CSS. Theo chỉ định của MDN, nó "là một chuỗi chứa một hoặc nhiều bộ chọn CSS được phân tách bằng dấu phẩy". Bạn có thể đọc về Bộ chọn CSS tại đây .
martieva

21

Mẹo bổ sung:

Nhiều "nots", đầu vào KHÔNG bị ẩn và KHÔNG bị tắt:

:not([type="hidden"]):not([disabled])

Ngoài ra, bạn có biết bạn có thể làm điều này:

node.parentNode.querySelectorAll('div');

Điều này tương đương với jQuery's:

$(node).parent().find('div');

Mà sẽ tìm thấy hiệu quả tất cả các div trong "nút" và bên dưới một cách đệ quy, HOT DAMN!


20

Với ví dụ của bạn:

<input type="checkbox" id="c2" name="c2" value="DE039230952"/>

Thay thế $$ bằng document.querySelectorA Tất cả trong các ví dụ:

$$('input') //Every input
$$('[id]') //Every element with id
$$('[id="c2"]') //Every element with id="c2"
$$('input,[id]') //Every input + every element with id
$$('input[id]') //Every input including id
$$('input[id="c2"]') //Every input including id="c2"
$$('input#c2') //Every input including id="c2" (same as above)
$$('input#c2[value="DE039230952"]') //Every input including id="c2" and value="DE039230952"
$$('input#c2[value^="DE039"]') //Every input including id="c2" and value has content starting with DE039
$$('input#c2[value$="0952"]') //Every input including id="c2" and value has content ending with 0952
$$('input#c2[value*="39230"]') //Every input including id="c2" and value has content including 39230

Sử dụng các ví dụ trực tiếp với:

const $$ = document.querySelectorAll.bind(document);

Một số bổ sung:

$$(.) //The same as $([class])
$$(div > input) //div is parent tag to input
document.querySelector() //equals to $$()[0] or $()
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.