Pero si mi JavaScript está escrito en el código... es una función (cambia()) que hace eso: oculta o muestra la fila según se pulse en el título (la fila anterior).
Lo que hay que hacer es: 1.) Meter el código de la función JavaScript en la parte del <head>, y 2.) Colocar la llamada a la función en los enlaces o elementos que queremos que la activen.
En el ejemplo que yo hice, el truco era el siguiente: creamos una tabla en la que vamos metiendo filas que sean los títulos del contenido que está en las filas de la tabla siguiente (inicialmente ocultas).
En cuanto a tu código, veo que sigues creando el código HTML al mismo tiempo que sucede el escaneo. Habría que poner el código que llama a la función JavaScript en la de scan_started(), haciendo que el 'id' a ocultar o mostrar sea el que vas a usar dentro de las celdas que se crean dentro de port_found(). Pero en tu código es más complicado que el mío: yo meto todos los puertos encontrados en solo UNA celda y a esa celda le doy el 'id' del titular, para que el código JavaScript sepa qué es lo que tiene que mostrar u ocultar.
El querer ocultar "Host description" es el mismo problema: es una celda nueva en una fila nueva.
Una posible solución (para tu caso de que un click() en un elemento oculte/muestre varios elementos) consistiría en que esos elementos tuviesen una serie de 'id' consecutivos, y dentro del código JavaScript, pasarle el primer 'id' y que hiciese un bucle por todos ellos, cambiando su estado.
La forma más sencilla sería meter todos los puertos y el "Host description" bajo solo un elemento (por ejemplo, otra tabla) y que sea el contenedor de ese elemento (la fila que lo contiene), el que tenga el 'id'. Así, la función JavaScript solo tiene que ocultar/mostrar ese elemento.