2011-05-09 182 views
1

我需要找到一個元素,它可以動態創建並且是DOM的一部分,並且可以改變它的一些屬性。我正在嘗試使用svg元素,但是您在Javascript/Jquery中的專業知識會對我有所幫助。Javascript/jquery屬性選擇器

<svg id="cvs" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" > 
    <rect uid="id1" class="cont" x="0" y="0" width="200" height="200" /> 
</svg> 

在運行時,我想補充一些更多的矩形元素,如

var el = document.createElementNS(svgNS,'rect'); 
     //set the attribues including uid //say id2, id3 etc 
    svg.appendChild(el); 

現在,我需要寫一個更新的方法,它基於的UID RECT elelement匹配,將所有的attribues。

updateRect = function(properties){ 
     $('rect[uid="' + properties.uid + '"]') { 
     for (var p in properties) { 
      this.setAttribute(p,prop[p]); 

     } 
} 

};

這是更多的僞代碼來顯示我的意圖。我不確定它是否也會找到動態創建的元素。有更好的邏輯嗎?我不必使用jQuery,但任何JS索爾將不勝感激。


編輯1: 選擇器可工作,但我在有點失落哪能鏈中的選擇對象上的操作。

類似,

var el = $('rect[uid="' + properties.uid + '"]') 
if el.exist() { 
//do the operation 
} 

或者更好的辦法???謝謝... 謝謝, bsr。

+1

爲什麼不把引用保留在使用uid作爲屬性名稱(鍵)的對象中?然後你只需查找對象上的屬性,就可以參考,不需要笨重的選擇器。 – RobG 2011-05-09 01:54:30

+0

Rob ..這是一個很好的評論..讓我想想如何在我的代碼中實現...謝謝 – bsr 2011-05-09 02:01:15

回答

1

IIUC布萊恩你想要做的事情是:

updateRect = function(properties){ 
    $('rect[uid="' + properties.uid + '"]').each(function(i, el) { 
     for (var p in properties) { 
      el.setAttribute(p,prop[p]); 
     } 
    }); 
}; 

updateRect = function(properties){ 
    $('rect[uid="' + properties.uid + '"]').each(function() { 
     for (var p in properties) { 
      this.setAttribute(p,prop[p]); 
     } 
    }); 
}; 

取決於您是要處理jQuery包裝器還是DOM元素。

+0

非常感謝你..如果我確定只有一個元素通過jQuery選擇器(uid = unique id)返回,是否有一種方法可以避免每個,並且仍然鏈接操作..爲了學習的緣故..謝謝再次 – bsr 2011-05-09 02:12:21

+0

嗨,很高興它的工作。我不是一個普通的jQuery用戶,但是如果在概念上可以有多個結果,'$'函數將返回一個列表,所以我認爲你不能在這裏避免使用'each',因爲可能存在每個SVG規則具有相同的'uid'的多個'rect'。但不要把這個詞當作絕對的。 – entonio 2011-05-09 18:21:35

1

當然應該發現任何新添加的DOM元素 - 不知道爲什麼它不會選擇它..

我會去到螢火蟲,而僅僅鍵入

$(「矩形」),看看如果有的話顯示出來,然後看看屬性,看看什麼東西上

+0

。謝謝你的幫助..可以ü請幫助我顯示如何鏈接對所選對象的行動...我更新了問題.. – bsr 2011-05-09 01:55:51

+0

你console.log(p)和日誌(prop [p])?值如何註冊? – Atticus 2011-05-09 02:00:35