Skip to main content
wolfgangappel
Participant
November 6, 2015
Answered

replace the text of an element with tag <bold>

  • November 6, 2015
  • 3 replies
  • 1285 views

Dear all,

I want to change the complete text of an element with a certain tag, say "<bold>".

I can get the tag name via elem.ElementDef.Name. But how do I get the text()-node of the Element.

Is there something like the xslt text()-node functionality? Some other ideas?

Thanks in advance

WA

This topic has been closed for replies.
Correct answer Russ Ward

function replaceElementText(doc, elem, newText)

{

    //Define a new element range and set it up

    //to represent the contents of the element.

    var er = new ElementRange();

    er.beg.parent = er.end.parent = elem;

    er.beg.offset = 0;

           

    if(ov(elem.FirstChildElement))

    {

        er.beg.child = elem.FirstChildElement;

        er.end.offset = 0;

    }

    else er.end.offset = Constants.FV_OBJ_END_OFFSET;   

   

    //Set the element range in the document and

    //execute Clear() to delete the current element contents.

    doc.ElementSelection = er;   

    doc.Clear(0);

   

    //The insertion point will now be at the beginning of

    //the empty element. Execute AddText() to insert the

    //new text.

    doc.AddText(doc.TextSelection.beg, newText);  

}

3 replies

Jeff_Coatsworth
Community Expert
Community Expert
September 13, 2021

@Priyanka5FC3 - contact Rick by Private Message or by e-mailing him using that address he gave.

Participant
August 11, 2021

How to do this scripting in FM, could you please help me?....I am not a coding person...We have to replace the bold format applied in the text with the bold tag, we have 3000+ pages, so automation will save the manual work. 

Legend
August 11, 2021

If you are "not a coding person," you will either need to take some time to learn how, or pay someone else to do it. It would not be possible to teach you how with a simple forum reply.

 

Russ

Participant
August 11, 2021

I can take the support from the coding person in my team....we just need to know the concept

Legend
November 6, 2015

Hi WA,

Good question. There is no concept of a single text node within a FrameMaker element like there is for other DOM tools. But even if there was, there still would be no direct method to set the text. In FrameMaker, you have to deal with element ranges and text selection tools to complete this kind of operation.

Here is a function that replaces the text of the provided element. Hope this helps.

Russ WardCorrect answer
Legend
November 6, 2015

function replaceElementText(doc, elem, newText)

{

    //Define a new element range and set it up

    //to represent the contents of the element.

    var er = new ElementRange();

    er.beg.parent = er.end.parent = elem;

    er.beg.offset = 0;

           

    if(ov(elem.FirstChildElement))

    {

        er.beg.child = elem.FirstChildElement;

        er.end.offset = 0;

    }

    else er.end.offset = Constants.FV_OBJ_END_OFFSET;   

   

    //Set the element range in the document and

    //execute Clear() to delete the current element contents.

    doc.ElementSelection = er;   

    doc.Clear(0);

   

    //The insertion point will now be at the beginning of

    //the empty element. Execute AddText() to insert the

    //new text.

    doc.AddText(doc.TextSelection.beg, newText);  

}

Legend
November 6, 2015

WA,

I just noticed one thing in my code that won't work for you, that ov() call. That is a personal shortcut to determine the validity of an object. Here is the code:

function ov(obj)

{

    if(obj == null) return false;

    else return obj.ObjectValid();

}

Russ