问题描述
我的view.jsp中有以下标记:
<liferay-ui:input-localized id="message" name="message" xml="" />
我知道我可以设置XML并在本地化的输入上具有默认值。我的问题是我想使用javascript更改此属性。我正在听一些更改,并调用函数“ update()”来更新我的信息:
function update(index) {
var localizedInput= document.getElementById('message');
localizedInput.value = 'myXMLString';
}
更改值仅更新当前选择的语言输入(带有整个XML字符串)。 XML字符串正确,但我不确定如何使用javascript更新输入的XML。
这可能吗?
PS:我已经在https://wiki.videolan.org/Documentation:Modules/display/中发布了此内容,以尝试吸引更多的人。
解决方法
在研究了一个案例并进行了一些测试之后,我认为我找到了解决方法。不知道这是否是正确的方法,但是它对我有用,因此我将发布当前的解决方案以供将来参考。
检查HTML之后,我注意到 Liferay-UI:input-localized 标签在默认情况下会创建一个 input 标签,然后为每种语言再添加一个input标签,每次您选择一种新语言。知道我使用Javascript创建了一些函数来帮助我更新从liferay-ui:input-localized创建的输入。这是相关的代码:
function updateAnnouncementInformation(index) {
var announcement = announcements[index];
// the announcement['message'] is a XML String
updateInputLocalized('message',announcement['message']);
}
function updateInputLocalized(input,message) {
var inputId = '<portlet:namespace/>' + input;
var xml = $.parseXML(message);
var inputCurrent = document.getElementById(inputId);
var selectedLanguage = getSelectedLanguage(inputId);
var inputPT = document.getElementById(inputId + '_pt_PT');
inputPT.value = $(xml).find("Title[language-id='pt_PT']").text();
var inputEN = document.getElementById(inputId + '_en_US');
if (inputEN !== null) inputEN.value = $(xml).find("Title[language-id='en_US']").text();
else waitForElement(inputId + '_en_US',inputCurrent,inputId,xml);
var inputLabel = getInputLabel(inputId);
if (selectedLanguage == 'pt-PT') inputLabel.innerHTML = '';
else inputLabel.innerHTML = inputPT.value;
if (selectedLanguage == 'pt-PT') inputCurrent.value = inputPT.value;
else if (inputEN !== null) inputCurrent.value = inputEN.value;
else waitForElement(inputId + '_en_US',xml);
}
function getSelectedLanguage(inputId) {
var languageContainer = document.getElementById('<portlet:namespace/>' + inputId + 'Menu');
return languageContainer.getElementsByClassName('btn-section')[0].innerHTML;
}
function getInputLabel(inputId) {
var boundingBoxContainer = document.getElementById(inputId + 'BoundingBox').parentElement;
return boundingBoxContainer.getElementsByClassName('form-text')[0];
}
function waitForElement(elementId,xml) {
window.setTimeout(function() {
var element = document.getElementById(elementId);
if (element) elementCreated(element,xml);
else waitForElement(elementId,xml);
},500);
}
function elementCreated(inputEN,xml) {
inputEN.value = $(xml).find("Title[language-id='en_US']").text();
var selectedLanguage = getSelectedLanguage(inputId);
if (selectedLanguage == 'en-US') inputCurrent.value = inputEN.value;
}
通过此操作,我可以根据预构建的XML字符串更新 liferay-ui:input-localized 输入。我希望有人觉得这很有用,如果您要添加任何内容,请告诉我!
,要更改元素的文本值,必须更改元素的文本节点的值。
示例-
xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue = "new content"
假设“ books.xml”已加载到xmlDoc
获取元素的第一个子节点
将节点值更改为“新内容”