jQuery( document ).ready( function( $ ) { // biography // FIXME there is probably a more efficient way to do this var td = $( '#description' ).parent(); var d = $( '#description' ).clone(); var span = td.children( '.description' ).clone(); td.children().remove(); $( '.biography' ).each( function(){ lang = $( this ).attr( 'name' ).split( '___' ); desc = d.clone(); desc.attr( 'name', 'description_' + lang[0] ); desc.attr( 'id', 'description_' + lang[0] ); // Whitelist because description and lang value is already escaped by the side of PHP desc.html( $( this ).val() ); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.html td.append( $( '
' ).text( lang[1] ) ); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.append td.append( desc ); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.append } ); td.append( '
' ); // Whitelist because description come from html code generated by WordPress td.append( span ); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.append } );