使用javascript更改liferay-ui:input-localized XML

问题描述

我的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

获取元素的第一个子节点

将节点值更改为“新内容”