2013-03-12 34 views
-2

DOM元素區分我有一些代碼,遍歷表的每一行,並創建一個JSON對象。在這些行中的元素可以是以下任一操作:如何在jQuery中

<input type="text" id="myelem"/> 

<p id="myelem">foo</p> 

注意,id屬性的兩個相同。這是因爲,在桌子上有一個按鈕Add a new Row時,點擊此按鈕另一行添加到表的複選框。當用戶提交的複選框消失的形式和他們進入此值會變成<p id="myelem">value they entered</p>

下面是我使用這個代碼。

$('.input-row').each(function(index, row) { 
     var innerObject = {}; 
     var key = $('#myelem', row).val().toUpperCase(); 
     jsonObject[key] = "bar"; 
    }); 

上述工程的罰款文本框becuse我使用的.val()功能。但是,如果包含<p id="myelem">foo</p>?如何從行中獲取數據?

我的僞代碼將是這樣的:

$('.input-row').each(function(index, row) { 
     var innerObject = {}; 
     /* 
     if #myelem is a text box then use .val() 
     if #myelem is a <p> tag then use .html() 
     */ 
     var key = $('#myelem', row).val().toUpperCase(); 
     jsonObject[key] = "bar"; 
    }); 
+4

你不應該重複'ID's。 – 2013-03-12 17:46:03

+0

我認爲這是違反規範有重複的ID。 ID在單個頁面上應該是唯一的。重複的id可能會導致未定義的行爲。 – 2013-03-12 17:46:06

+0

id在頁面上應始終是全局唯一的。 http://www.w3schools.com/tags/att_global_id.asp – 2013-03-12 17:46:58

回答

1

您可以檢查元素與

var value = null; 
if($('#myid').is('input')) { 
    value = $('#myid').val(); 
} 
else if($('#myid').is('p')) { 
    value = $('#myid').html(); 
} 
3

id S的關係始終是一個網頁上全球唯一的。如果您需要多個元素被引用,你應該使用classes。如果設置myelemclass,而不是id然後你可以像這樣引用它

$('.input-row .myelem') 
+1

它們在首次展示時不是唯一的...使用類。 – 2013-03-12 17:47:05

0

ID都是唯一的。您不能在同一頁面中使用多個ID。如果你這樣做,你應該如何決定使用哪個元素?

0

您可以使用jQuery哪種類型是()如if $('#myelem').is ('p'){...}

+0

打字速度太慢,梅雷克已經說過了 – kevmc 2013-03-12 17:54:32

0

如果仍想堅持的發展之路,然後在下面可以幫助你:

$('.input-row').each(function(index, row) { 
    var innerObject = {}; 
    var c = $('#myelem', row); 
    var isInputField = c.get(0).tagName.toUpperCase()=="INPUT"; 
    var key =isInputField ? c.val().toUpperCase():c.html().toUpperCase(); 
    jsonObject[key] = "bar"; 
}); 
0

這只是讓你開始。您在類input-row上使用.each,但是您沒有在您提供的代碼中顯示該類。在這個例子中,我使用了class而不是id。用它來提前工作。

Fiddle