2016-12-17 73 views
0

假設我有以下DIV:如何更改元素的HTML子元素之前

<div id = "master"> 
    "Random Text 
    <span id = "unknown">...</span> 
</div> 

如果我不知道跨度的ID,我將如何使用jQuery修改"Random Text"

請注意proposed duplicate的回答是javascript而不是jQuery。

+1

一個文本子節點@JorgeMejia你不讀題。 OP想要更改文本節點 – charlietfl

+1

您是否有任何方法可以識別您想要更改的文本?它會始終出現在''標籤之前,它會始終是字符串「隨機文本」嗎? –

回答

2

使用節點類型屬性查找文本節點

節點類型3是文本節點。

http://www.w3schools.com/jsref/prop_node_nodetype.asp

可以使用nodeValue屬性來設置一個文本節點元素

var textNodeList = $("#master") 
 
    .contents() 
 
    .filter(function() { 
 
    return this.nodeType === 3; //Node.TEXT_NODE 
 
    }); 
 

 

 
textNodeList[0].nodeValue = "Not Random Text";
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id = "master"> 
 
    "Random Text 
 
    <span id = "unknown">...</span> 
 
</div>

-1

你可以這樣做:

var masterDiv = $('#master'); 
var text_to_change = masterDiv.childNodes[0]; 
text_to_change.nodeValue = 'new text'; 

這應該得到的是工作。

+0

有什麼區別。只需更改選擇器 –

+0

@Mahi jQuery沒有文本節點方法。如果你自己沒有解決方案,請停止抱怨使用本地dom方法 – charlietfl

+0

這就是爲什麼他問問題只使用jquery解決的問題 – Mahi

-1

也許像這樣的文本?

$('#unknown')[0].previousSibling.nodeValue = 'something else'; 

JSFiddle

0

的jQuery沒有它自己的文本節點的方法。

抽象的方法只使用jQuery的,不需要知道或使用本地DOM方法或屬性

$('#master').html(function(){ 
    return $(this).children().clone(true);// only return elements, clone to preserve any possible event handlers 
}).prepend('Some new text'); 

假設僅存在#master