在ADF

2016-02-25 63 views
1

使用jQuery動態生成的ID我用下面的代碼來獲取ID p:r:0:abcp\\:r\\:0\\:abc在ADF

function getId(comp) { 
    var id = comp.getClientId().split(':').join('\\\\:'); 
    return id; 
} 

,我使用生成的ID爲以下

$(id).css("background-image", "url('../something.png')"); 
$(id).slideToggle(); 

它不改變背景或做動畫

但是,如果我硬編碼的ID如下,其工作正常

$(`#p\\:r\\:0\\:abc`).css("background-image", "url('../something.png')"); 
$(`#p\\:r\\:0\\:abc`).slideToggle(); 

你能指點?

+0

你爲什麼不這樣做'comp.getClientId()分裂( ':')加入( ' - ')'。?這樣,你可以使用'#p-r-0-abc'代替!或者更好,使用'comp.getClientId()。replace(/:/ g,' - ')'!如果':'變成別的東西,只需使用'.replace(/[!"#$%&'\(\)*+,.\/,; <=>?@ \ [\\\] ^'{| }〜]/g,' - ')'並且你被設置了! –

+0

框架生成的id是'p:r:0:abc',所以我不認爲我可以改變它嗎? – Sam

+0

框架創建了元素id,請告訴我它不是! –

回答

1

你有1個在加入太多\

您只需要1 \即可跳過: - p\:r\:0\:abc

var id = "p:r:0:abc".split(':').join('\\\:'); 
 
alert($('#' + id).text())
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<b id="p:r:0:abc">TEST</b>

+0

單身?我以爲我看到它是雙反斜槓?它在舊版本中的工作方式有何不同? – Sam

+0

你需要\\來逃脫\。但一個逃避其他角色。如果你的ID是'富\:bar'則需要3 \\\:2的\和1':'。它的工作原理是 – BenG

+0

。感謝您的解釋 – Sam

1

您在創建選擇器時缺少id選擇器#。它應該是:

$('#'+id); // id = 'p\\:r\\:0\\:abc' 

您可以使用,而屬性等於選擇用特殊字符來處理選擇:

var id= 'p:r:0:abc'; 
$('[id="'+id+'"]').css("background-image", "url('../something.png')"); 
$('[id="'+id+'"]').slideToggle(); 
+0

不要忘記,一個'id'選擇器**只有且只有**選擇1個元素。爲了保持它相同,你必須**在選擇器後面使用'eq(0)'(例如:'$('[id =''+ id +'「]')。eq(0)'或'$ ('[id =''+ id +'「]:eq(0)')') –

+0

@Sam:轉義後id的值是多少?它應該是'p \\:r \\:0 \\:abc' –

+0

感謝它的工作。 Ya轉換後的值是p \\:r \\:0 \\:abc。但它沒有工作 – Sam