Tạo hiệu quả với id?


288

Tôi đang cố gắng sửa đổi mã này để cung cấp cho mục div này một ID, tuy nhiên tôi không tìm thấy gì trên google và idName không hoạt động. Tôi đã đọc một cái gì đó về việc chắp thêm , tuy nhiên nó có vẻ khá phức tạp đối với một nhiệm vụ có vẻ khá đơn giản, vậy có cách nào khác không? Cảm ơn :)

g=document.createElement('div'); g.className='tclose'; g.v=0;

4
Hay bạn có ý nghĩa g.id = 'foo';?
Vidime Vidas

1
Bây giờ tôi biết rằng tôi có nghĩa là cái thang :)
pufAmuf

3
Tìm kiếm Google này trả về một số kết quả hợp lý.
Felix Kling

Câu trả lời:


522

Bạn nên sử dụng .setAttribute()phương pháp:

g = document.createElement('div');
g.setAttribute("id", "Div1");

4
Với mã này, chúng tôi đang tạo ra không chỉ ID phần tử mà còn cho tất cả các thuộc tính của phần tử.
Mai

3
@Mai Bạn có thể giải thích thêm? Tôi không thể hiểu câu.
mystrdat

15
@mystrdat Tôi nghĩ rằng Mai đang cố gắng nói rằng setAttribution () có thể được sử dụng để tạo các thuộc tính khác của một phần tử chứ không chỉ id.
Chuck L

94

Bạn có thể sử dụng g.id = 'desiredId'từ ví dụ của mình để đặt id của phần tử bạn đã tạo.


Tôi luôn luôn nghĩ rằng annwer với ít mã là tốt nhất. Nhiều bắn là không thể. cám ơn.
m3nda 2/2/2015


34

Bạn có thể dùng Element.setAttribute

Ví dụ:

g.setAttribute("id","yourId")

g.setAttribute("class","tclose")


Đây là chức năng của tôi để làm điều này tốt hơn:

function createElement(element, attribute, inner) {
  if (typeof(element) === "undefined") {
    return false;
  }
  if (typeof(inner) === "undefined") {
    inner = "";
  }
  var el = document.createElement(element);
  if (typeof(attribute) === 'object') {
    for (var key in attribute) {
      el.setAttribute(key, attribute[key]);
    }
  }
  if (!Array.isArray(inner)) {
    inner = [inner];
  }
  for (var k = 0; k < inner.length; k++) {
    if (inner[k].tagName) {
      el.appendChild(inner[k]);
    } else {
      el.appendChild(document.createTextNode(inner[k]));
    }
  }
  return el;
}

Ví dụ 1:

createElement("div");

sẽ trả lại cái này:

<div></div>

Ví dụ 2:

createElement("a",{"href":"http://google.com","style":"color:#FFF;background:#333;"},"google");`

sẽ trả lại cái này:

<a href="http://google.com" style="color:#FFF;background:#333;">google</a>

Ví dụ 3:

var google = createElement("a",{"href":"http://google.com"},"google"),
    youtube = createElement("a",{"href":"http://youtube.com"},"youtube"),
    facebook = createElement("a",{"href":"http://facebook.com"},"facebook"),
    links_conteiner = createElement("div",{"id":"links"},[google,youtube,facebook]);

sẽ trả lại cái này:

<div id="links">
    <a href="http://google.com">google</a>
    <a href="http://youtube.com">youtube</a>
    <a href="http://facebook.com">facebook</a>
</div>

Bạn có thể tạo các phần tử mới và đặt (các) thuộc tính và nối thêm (các) con

createElement("tag",{attr:val,attr:val},[element1,"some text",element2,element3,"or some text again :)"]);

Không có giới hạn cho attr hoặc phần tử con


6
Tại sao trên Trái đất bạn sẽ chuyển các thuộc tính bằng cú pháp của riêng bạn [mà bạn phải phân tích cú pháp], khi bạn có thể sử dụng một đối tượng tiêu chuẩn? Thêm vào đó, nếu bạn cần tạo ra nhiều yếu tố, bạn cần một hệ thống tạo khuôn mẫu [ví dụ: Tay cầm] và không phải là các hàm quá phức tạp.
moonwave99

3
Chức năng này là một trong những chức năng đầu tiên trong số các chức năng của tôi và tôi chưa nghĩ đến việc cập nhật. Tôi nghĩ ý tưởng của bạn tốt hơn và tôi chắc chắn sẽ thay đổi nó. Cảm ơn vì điều đó.
Guja1501

7
Mặc dù họ đúng, cảm ơn vì đã cung cấp thêm thông tin và các cách khác để thực hiện. Rất sâu sắc.
Fata1Err0r

15

Tại sao không làm điều này với jQuery?

var newDiv= $('<div/>', { id: 'foo', class: 'tclose'})

7
không phải ai cũng có thể hoặc muốn sử dụng jQuery. Nhưng nếu là anh ta, anh ta chỉ có thể làm var g = $ ('<div id = "blah" class = "tclose">');
Bradley Mountford

24
@BradleyMountford: Anh ấy đã gắn thẻ câu hỏi với jQuery. thay vì tôi đã đề xuất một giải pháp jQuery
Shyju

2
Mặc dù đặc tả không cấm sử dụng các từ khóa dành riêng làm tên thuộc tính, nhưng vẫn có thể tốt hơn để đặt classdấu ngoặc kép.
Felix Kling

5
var element = document.createElement('tagname');    

element.className= "classname";
element.id= "id";

Hãy thử cái này bạn muốn.


4

Tôi không chắc chắn nếu bạn đang cố gắng đặt ID để bạn có thể định kiểu nó trong CSS nhưng nếu đó là trường hợp bạn cũng có thể thử:

var g = document.createElement('div');    

g.className= "g";

và điều đó sẽ đặt tên cho div của bạn để bạn có thể nhắm mục tiêu.

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.