Có cách nào tốt hơn để viết chức năng sau đây không?có cách nào khác thay thế cho '#' + div_id không?
Có số '#' + div_id
có vẻ không đúng với tôi.
function hide_div(div_id) {
$('#' + div_id).hide();
}
Có cách nào tốt hơn để viết chức năng sau đây không?có cách nào khác thay thế cho '#' + div_id không?
Có số '#' + div_id
có vẻ không đúng với tôi.
function hide_div(div_id) {
$('#' + div_id).hide();
}
Câu trả lời ngắn gọn: không. Hơi dài và trả lời hackish hơn: tạo một hàm với một tên dài một chữ mà sẽ đưa ID của phần tử và trả về một getElementById vào nó, sau đó quấn rằng trong jQuery của bạn $()
, như vậy:
function i(id) {
if (document.getElementById(id)) return document.getElementById(id);
else return "";
}
Sau đó:
$(i(id)).doWhatever();
Nhưng thành thật, suy nghĩ về nó:
$("#" + id)
12345678
$(i(id))
12345
đó là ba nhân vật. Nó có đáng không? Ba nhân vật đó có thực sự quan trọng đối với bạn không? Bạn đã tiết kiệm được rất nhiều khi không sử dụng document.getElementById (id) (27 ký tự).
Nếu nó cho điều này, bạn có thể đã viết 'function i (id) {return '#'. (ID); } ', nhưng tôi đoán phương pháp của bạn là hiệu quả hơn :-) –
Vâng, có vẻ tốt, tôi sẽ không bận tâm viết một hàm để xử lý nó. – Filype
Hàm có thể được giảm xuống thành 'return document.getElementById (id)'. – Esailija
function hide_div(div_id) {
$(div_id).hide();
}
... nơi ...
div_id = '#someId';
hide_div(div_id);
Nếu bạn đang bằng cách nào đó trái ngược với nối chuỗi, sau đó bạn có thể làm điều này thay vì:
$(document.getElementById(div_id)).hide();
Bạn có thể cũng vượt qua trong bộ chọn đủ điều kiện, như sau:
hide_div("#divId");
Nếu bạn muốn làm điều đó trong vani Javascript, bạn có thể làm điều này:
document.getElementById(div_id).style.display = "none";
Lưu ý rằng '.show() /. Hide()' nhận thức được phần tử 'display' ban đầu. Vì vậy, khi bạn '.show()' trên bảng '.hide()' d, nó sẽ trở thành '" display: table; "' một lần nữa. Vì vậy, javascript vanilla chỉ tương đương với một số tình huống. – Esailija
Tôi đánh giá cao rằng có rất nhiều cách để làm điều này. Mặc dù trong nguyên mẫu, bạn có thể sử dụng '$ ('footer')', câu hỏi của tôi là một cái gì đó giống như thế này tồn tại trong jQuery. Tôi biết người khác cũng thắc mắc về điều này. Tôi nghĩ rằng nó sẽ là một tính năng jQuery tốt đẹp – Filype
@Filype: '" footer "' sẽ cung cấp cho bạn tất cả các phần tử 'footer' trong khi' "#footer" 'phần tử có id' footer'. Prototype hoạt động theo cùng một cách. – Andreas
Một số cách khác:
$(['#', div_id].join('')).hide();
$('#'.concat(div_id)).hide();
Ngoài ra, @Thomas cảm hứng cho tôi cho giải pháp thay thế này:
Khi bạn gọi hàm của mình, hãy sử dụng:
$.proxy(hide_div, $('#' + div_id));
// Then, you can do this:
function hide_div() {
this.hide();
}
Nó có thể cho phép bạn sử dụng lại tốt hơn. Hay không.
... làm thế nào là một sự cải tiến? –
'" # ". Concat (div_id)': D – Esailija
@PeterOlson không phải là cải tiến, chỉ cần một cách khác :-) –
Không, bạn không thể rút ngắn quá mức đó. Một thay thế cho # + div_id sẽ là:
$('[id="'+div_id+'"]')
Truy vấn này đang làm việc với bộ chọn thuộc tính []. Không ngắn hơn, không sạch, thực sự chậm hơn nhưng một sự thay thế nào
Tôi biết nhưng anh ấy đã yêu cầu thay thế! – TecHunter
Tùy thuộc vào trường hợp sử dụng bạn có thể vượt qua các đối tượng thay cho id:
$('#someobject').click(function(){
hideDiv(this);
});
cho chúng ta thấy làm thế nào bạn đang kêu gọi 'hide_div() ' , hiện tại, đây là cách duy nhất: s –
câu trả lời ngắn gọn. – coolguy
@SiGanteng chức năng này chỉ dành cho mục đích lý thuyết, vì vậy bạn hiểu những gì tôi muốn biết – Filype